如何创建作为其他类型的子集的类型?我想要一个仅包含字母数字字符的字符串类型。
所以我想要这样的东西
type AlphNumString = [AlphaNumChar]
data AlphaNumChar = ???? filter (isAlphaNum) Char ????
执行此操作的标准方法是使用所谓的“智能构造函数”。
首先,定义一个与旧类型相同的新类型:
newtype AlphNumString = X String
接下来,编写智能构造函数本身:
toAlphNumString :: String -> AlphNumString
toAlphNumString txt = X (filter isAlphNum txt)
最后,您做到了,这toAlphNumString
是创建的唯一方法AlphNumString
。
module Foo (AlphNumString (), toAlphNumString, ...) where ...
请注意,这并没有让你使用AlphNumString
像一个正常的String
; 您无法在Haskell中创建“子类型”。所以你还需要另一个功能
fromAlphNumString :: AlphNumString -> String
fromAlphNumString (X txt) = txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句