6

Typeclassopediaのいくつかの演習に取り組もうとしていますが、の独自の Monad インスタンスを定義するのに苦労[]しています。Maybe効果的に非表示にできましたが、非表示にしようとすると[]、次のエラーが発生します。parse error on input '['

このコード行を使用してインポートしています:

import Prelude hiding (Maybe, Just, Nothing, [])

に変更[]([])ても、この問題は解決しません。

これを行う方法がわかりません。どんな助けでも素晴らしいでしょう!ありがとう!

4

2 に答える 2

10

を試すこともできますが-XNoImplicitPrelude、おそらく最も簡単なのは、この型とList同等のセマンティクスを持つ独自の型を定義[]し、この型のインスタンスを実装することです。

インスタンスを非表示にすることはできず、import Prelude ()インスタンスをインポートすることさえできません。

于 2012-08-17T19:09:42.303 に答える
4

基本的に、リスト構文は魔法のように組み込まれています。Haskell が作成されたとき、リストは非常に普遍的で便利であると考えられていたため、特別な角括弧構文を使用してさらに便利にする必要がありました。したがって、組み込みの と同じ構文で独自のリスト型を定義することはできません。[a]同様に、[]構文を非表示にすることはできifませんwhere。それでも、独自のリスト型を定義し、組み込みのリスト型との間の変換関数を定義することはできます。他の人が指摘しているように、リスト関数を自分で定義することは、それほど難しいことではなく、非常に教育的です。

もちろん、Monad同じシグネチャを使用して独自のクラスを定義し、それを使用することもできます。

于 2012-08-18T22:40:28.563 に答える