2

Haskell で再帰型を定義することに慣れようとしています。簡単な演習として、空でないリストのデータ型を定義するのは簡単である (そして潜在的に役立つ) と考えました。

これが私の試みです:

data NonemptyList a = Singleton a | Cons (Singleton a) (NonemptyList a)

コンパイルエラーが発生します:

スコープ外: 型コンストラクターまたはクラス `Singleton'
失敗、ロードされたモジュール: なし。

次のコードはコンパイルできますが、うまくいきません。その理由を正確に説明することはできません。

data NonemptyList a = Singleton a | Cons  a (NonemptyList a)

誰かが私のためにこれを明確にすることができますか? どんなコメントでも大歓迎です。

ありがとう

ダン

4

2 に答える 2

4

補足として、空でないリストを定義するより簡単な方法は次のとおりです。

data NonEmpty a = NonEmpty { head :: a, tail :: [a] }

空でないリストの最も一般的なパッケージは、 Data.List.NonEmptyモジュールsemigroupsの上記の定義に似たものを持つパッケージです。

于 2013-09-13T22:51:58.540 に答える