如何创建属于其他类型子集的类型?我想要一个只包含字母数字字符的字符串类型.
所以我想要这样的东西
type AlphNumString = [AlphaNumChar]
data AlphaNumChar = ???? filter (isAlphaNum) Char ????
Run Code Online (Sandbox Code Playgroud)
执行此操作的标准方法是使用所谓的"智能构造器".
首先,定义一个与旧类型相同的新类型:
newtype AlphNumString = X String
Run Code Online (Sandbox Code Playgroud)
接下来,您编写智能构造函数本身:
toAlphNumString :: String -> AlphNumString
toAlphNumString txt = X (filter isAlphNum txt)
Run Code Online (Sandbox Code Playgroud)
最后,你做到这一点toAlphNumString是创建一个的唯一方法AlphNumString.
module Foo (AlphNumString (), toAlphNumString, ...) where ...
Run Code Online (Sandbox Code Playgroud)
请注意,这并没有让你使用AlphNumString像一个正常的String; 你不能在Haskell中创建像那样的"子类型".所以你还需要另一个功能
fromAlphNumString :: AlphNumString -> String
fromAlphNumString (X txt) = txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |