gpt4 book ai didi

haskell - 创建一个类型,它是其他类型的子集

转载 作者:行者123 更新时间:2023-12-03 15:38:43 25 4
gpt4 key购买 nike

如何创建作为其他类型子集的类型?我想要一个只包含字母数字字符的字符串类型。

所以我想要这样的东西

type AlphNumString = [AlphaNumChar]
data AlphaNumChar = ???? filter (isAlphaNum) Char ????

最佳答案

执行此操作的标准方法是使用所谓的“smart constructors”。

首先,您定义一个与旧类型相同的新类型:

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

关于haskell - 创建一个类型,它是其他类型的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33320107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com