リスト[A、B、C]があるとします。次のセマンティクスを使用して、そのリストに基づいて代数データ型を宣言できる方法はありますか:
data V = A | B | C
ありがとう!
リスト[A、B、C]があるとします。次のセマンティクスを使用して、そのリストに基づいて代数データ型を宣言できる方法はありますか:
data V = A | B | C
ありがとう!
必要なのは、動的に生成される抽象データ型です。これは、ADT を使用するどの言語でもかなり標準的ではないように思えます。
あなたができることは、単一のコンストラクターを持つデータ型と、コンストラクターに渡すことができる値にいくつかのロジックを課す、いわゆるスマートコンストラクターを持つことです。
data PermList a = PermList ([a] -> Bool) [a]
permList :: ([a] -> Bool) -> [a] -> PermList a
permList f xs | f xs = PermList f xs
| otherwise = undefined