Haskell:具有条件的自定义类型

时间:2010-07-23 09:56:26

标签: haskell types

我是一名哈斯克尔新手,我找不到这个问题的答案。

我们可以定义条件类型吗?例如,简单的用户定义数据类型为:

data MyList = MyList [a]

我可以以某种方式修改此代码,以便MyList构造函数只能使用偶数个元素的列表吗?像

这样的东西
data MyList = MyList [a] where (even (length a))

谢谢!

2 个答案:

答案 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)