展开自定义列表类型

什么时候我们

如果我有以下情况:

type StringList = StringList of string list
let sl = StringList [ "Hello, "; "World" ]
let length = List.length sl

然后会引发以下编译器错误:

This expression was expected to have type 'a list but here has type StringList

我的理解是,这StringList是一个option“包装” string list,那么我如何“包装”它,以便可以List在其上调用方法?

托马斯·佩特里切克(Tomas Petricek)

问题是您的StringList类型正在定义一个新的类型,该类型是包装器string list可以使用的功能string list在您的包装不起作用,因为它们对此一无所知。

您可以将其定义StringList为类型别名-因此,与其定义新的类型,不如定义一个新的类型:

type StringList = string list
let sl : StringList = [ "Hello, "; "World" ]
let length = List.length sl

另一种选择是string list在调用之前提取List.length

type StringList = StringList of string list

let stringListlength (StringList(slData)) = 
    List.length slData

let sl = StringList [ "Hello, "; "World" ]
stringListlength sl

在第一种方法中,您只是定义一个名称,但是编译器不会对此进行任何检查,因此,仅当您想在类型注释中使用该名称(例如)以使名称可读时,它才有用。

在第二种方法中,您实际上是在定义一个新的类型,因此要确保与之共事的每个人都StringList将使用您定义或与其一起使用的功能。

这里很难说什么是好的方法,因为StringList这不是一个很好的例子-它实际上并没有传达任何其他信息string list

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何定义不是列表的自定义插槽类型?

来自分类Dev

使我的自定义列表类返回“列表”作为类型

来自分类Dev

展开式列表视图android的自定义子布局

来自分类Dev

双击以在Angular 1.2.x上展开自定义下拉列表

来自分类Dev

展开自定义 ListView (android) 中的所有列表项

来自分类Dev

通过自定义帖子类型限制自定义分类下拉列表

来自分类Dev

将列表传递给SQL自定义类型

来自分类Dev

没有列表类型参数的自定义ArrayAdapter

来自分类Dev

在PlayerPrefs中保存自定义类型的列表

来自分类Dev

自定义字段类型在卡桑德拉:数组列表

来自分类Dev

串联自定义列表包装器数据类型

来自分类Dev

将列表传递给SQL自定义类型

来自分类Dev

自定义帖子类型中的Wordpress列表类别

来自分类Dev

使用自定义数据类型过滤列表

来自分类Dev

Haskell:访问自定义列表类型的元素

来自分类Dev

对自定义类类型中的控件列表进行排序

来自分类Dev

如何在 umbraco 中创建表示自定义数据类型列表的自定义数据类型?

来自分类Dev

自定义类型转换

来自分类Dev

自定义“列表”组件

来自分类Dev

创建自定义列表

来自分类Dev

自定义编号列表

来自分类Dev

自定义AutocompleteTextView的列表

来自分类Dev

遍历自定义列表

来自分类Dev

展开地图中的自定义事件处理程序

来自分类Dev

自定义ListView展开后不会崩溃

来自分类Dev

自定义WKInterfaceTable行中的WKInterfaceLabel展开为nil

来自分类Dev

未触发自定义搜索的展开

来自分类Dev

自定义树视图的展开/折叠图标

来自分类Dev

自定义类型类的类型麻烦