我是一名哈斯克尔新手,我找不到这个问题的答案。
我们可以定义条件类型吗?例如,简单的用户定义数据类型为:
data MyList = MyList [a]
我可以以某种方式修改此代码,以便MyList构造函数只能使用偶数个元素的列表吗?像
这样的东西data MyList = MyList [a] where (even (length a))
谢谢!
答案 0 :(得分:7)
不,你不能。
如果真的有必要,可以自己编写类似构造函数的函数。
toMyList :: [a] -> MyList
toMyList l | even (length l) = MyList l
| otherwise = error "Length of list has to be even"
或者如果可能发生错误检查:
toMyList :: [a] -> Maybe MyList
但是根据用例,也许你可以通过类型(例如元组或两个列表)表达自己,而不是通过运行时检查。
答案 1 :(得分:3)