创建作为其他类型的子集的类型

亨克

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

所以我想要这样的东西

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

流:通过扩展其他类型来创建流类型

是否可以将枚举类型作为参数传递并在其他函数中重用此类型?

创建一个行为类似于其他类型的基本类型

创建从任何类型到任何其他类型的闭包向量

以其他枚举作为类型的枚举

如何创建泛型类类型作为另一种类型的子集

给定字符串常量的元组类型和其他类型的元组类型,请使用字符串键和值类型创建对象类型

如何创建其他列作为数组的列(卡住了不兼容的类型)?

其他类型的TryParse

扣除其他类型依赖的类型

我可以使用其他函数的类型信息作为Python中的返回类型吗?

如何从其他EBS类型创建的AWS快照中创建其他AWS EBS卷

构建Autofac容器时,如何将以前注册的类型作为参数包括在其他注册类型中?

如何创建支持算术运算的自定义数据类型,作为任何其他常规数据类型

Typescript使用其他类型的必需键创建一个类型

是否可以将类型特征限制为不接受其他类型特征作为参数?

在模板化类型中用其他类型递归替换类型

如何角色使用c#IList接口类型或其他接口作为类型?

过程-创建引用其他表列类型的表

创建作为其他宏列表SAS的子集的宏

其他类型的“ const”?

在Drupal 7中定义并使用其他节点类型的字段作为我的表单元素类型

如何创建行为与其他类型一样的类型?

为什么字典作为类的引用传递而其他类型被复制?

Swashbuckle 用其他类型替换类型

子集函数没有类型作为参数?

创建域模型时如何为 String 和其他数据类型创建更具体的类型

基于其他类型动态的新类型

阻止其他类型的键盘