对于数据类型构造函数,有没有办法根据构造函数的参数类型以外的条件限制"对象"(我不知道正确的术语)的创建?
例如:
data UInt = UInt Int --the int must be >= 0
Run Code Online (Sandbox Code Playgroud)
确实,我想为矩形多维列表创建一个数据类型(其中所有子列表具有相同的长度).一类或其他技术会更适合这种情况吗?
不,没有办法强制用户传递给构造函数的值.
但是,在创建智能构造函数的社区和标准库中有一种常见的做法.你像模块看到这些Data.Map,Data.Ratio以及更多.简单地说,你不导出构造函数本身,只导出类型,并导出一个审查参数的函数:
module UInt
( UInt
, uint
) where
data UInt = UInt Int
uint :: Int -> Maybe UInt
uint x | x >= 0 = Just (UInt x)
| otherwise = Nothing
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |