Haskellに惑わされ

先日来 純粋関数型言語 Haskellの勉強を初めています これが今までのプログラミング言語とは質が異なる難しさなのです 本当に何が何だか訳が分からん

頼りは Kindleで購入した Haskellの書籍です これも数種類あり、その中の Kindleで download可能な書籍5冊を購入し、読み始めました しかし、その中の二冊はあまりにも難解な解説なので脱落、残りの三冊をあっち読んだり、こっち読んだりしながら理解を少しずつゆっくりと進めています しかしまた難点に衝突です

class Monoid a where
  mempty:: a
  mappend:: a -> a -> a
  mconcat::[a] -> a
  mconcat = foldr mappend mempty

instance Monoid [a] where
  mempty = []
  mappend = (++)

これが compile errorとなるのです どうしても理解できません これよりか先に進めるのでしょうか???

投稿者: (KAMAKURA & SAPPORO)Dr_Radialist

Expert Interventional Cardiologist and Amateur Computer Programmer

「Haskellに惑わされ」への2件のフィードバック

  1. こんにちは。お困りのようですのでコメントさせて頂きます。

    おそらく、エラーの内容は「Ambiguous occurrence ‘Monoid’」というようなものかと思います。(間違っていたらすみません。エラーの内容を書いていただければより的確なコメントができるかと思います)

    エラー原因についてですが、最近のHaskell処理系では、MonoidクラスがPrelude(デフォルトでimportされる標準ライブラリーのモジュール)に含まれるようになりました。そのため、自分のコードでMonoidクラスを定義すると、 instance Monoid [a] で指しているMonoidクラスがどちらのものか(Prelude由来のものか、自分で定義したものか)が曖昧になります。

    解決するには、

    a. 自分で定義する型クラスの名前を「Monoid」以外にする(「MyMonoid」など)

    b. ファイルの先頭に import Prelude hiding (Monoid(..)) と書く

    のいずれかの方法があります。

コメントを残す

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