我是一个哈斯克尔新手,我找不到这个问题的答案.
我们可以用条件定义类型吗?例如,简单的用户定义数据类型将是:
data MyList = MyList [a]
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式修改此代码,以便MyList构造函数只能采用具有偶数元素的列表吗?就像是
data MyList = MyList [a] where (even (length a))
Run Code Online (Sandbox Code Playgroud)
谢谢!
不,你不能.
如果真的有必要,那就自己编写一个类似于构造函数的函数.
toMyList :: [a] -> MyList
toMyList l | even (length l) = MyList l
| otherwise = error "Length of list has to be even"
Run Code Online (Sandbox Code Playgroud)
或者如果可能发生错误检查:
toMyList :: [a] -> Maybe MyList
Run Code Online (Sandbox Code Playgroud)
但是根据用例,也许您可以通过类型(例如元组或两个列表)表达自己,而不是通过运行时检查.
| 归档时间: |
|
| 查看次数: |
387 次 |
| 最近记录: |