助け舟到来か

今朝方 uploadした「Haskellに惑わされ」という投稿に対して、親切にも助け舟が入りました しかしながら、僕自身助け舟に乗る資格があるのか否か分かりませんが・・・・

現在 Kindleで本間 雅洋、 類地 孝介様の書かれている 

Haskell入門 関数型プログラミング言語の基礎と実践

というもので勉強しています その中に書かれている例題

class Greeting a where
 name :: a -> String
 hello :: a -> String
 hello _ = "..."
 bye :: a -> String
 bye _ = "..."

instance Greeting Human where
 name (Human n) = n
 hello h = "Hi, I am " ++ name h ++ "."
 bye _ = "See you again!"

というものを $ghciでコンパイルすると

[1 of 1] Compiling Main             ( myfunctions.hs, interpreted )

myfunctions.hs:44:19: error:
    Not in scope: type constructor or class ‘Human’
   |
44 | instance Greeting Human where
   |                   ^^^^^

myfunctions.hs:45:8: error: Not in scope: data constructor ‘Human’
   |
45 |  name (Human n) = n
   |        ^^^^^
Failed, no modules loaded.

というエラーが出て compileに失敗するのです

正直のところさっぱり分かりません この Monoidとか Monadとかを理解するには自分の能力が far awayと感じます

というのを、助け舟に感激してTAVIの合間に書いてしまいました

投稿者: (KAMAKURA & SAPPORO)Dr_Radialist

Expert Interventional Cardiologist and Amateur Computer Programmer

「助け舟到来か」への2件のフィードバック

  1. 「3.8.3 型クラスとインスタンスの定義」の例ですね。

    エラーの内容は「Humanという型が定義されていない」というものです。Humanという型はHaskellの標準ライブラリー等で定義されている型ではないので、そのコードのコンパイルを通すには自分でHuman型の定義を書く必要があります。

    今回は本のサンプルコードなので、本の何処かにHuman型の定義が書かれているはずです。実際、そのセクションの最初の方に「事前にDog, Cat, Humanの3種類の動物をdataで定義します。(略)」と書かれています。

    というわけで、ソースファイルには

    data Huma = Human String deriving Show

    class Greeting a where
    (略)

    instance Greeting Human where
    (略)

    という風に書けばOKです。

mod_poppo にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です