1

リスト[A、B、C]があるとします。次のセマンティクスを使用して、そのリストに基づいて代数データ型を宣言できる方法はありますか:

data V = A | B | C

ありがとう!

4

1 に答える 1

4

必要なのは、動的に生成される抽象データ型です。これは、ADT を使用するどの言語でもかなり標準的ではないように思えます。

あなたができることは、単一のコンストラクターを持つデータ型と、コンストラクターに渡すことができる値にいくつかのロジックを課す、いわゆるスマートコンストラクターを持つことです。

data PermList a = PermList ([a] -> Bool) [a]

permList :: ([a] -> Bool) -> [a] -> PermList a
permList f xs | f xs      = PermList f xs
              | otherwise = undefined
于 2013-01-24T22:52:45.290 に答える