Haskell:List的代数数据类型?

时间:2013-01-24 22:40:02

标签: haskell

假设我有一个列表[A,B,C]。有没有什么方法可以基于该列表声明代数数据类型,具有以下语义:

data V = A | B | C

谢谢!

1 个答案:

答案 0 :(得分: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