如何在Haskell中转换用户数据类型
我正在尝试定义自己的数据类型,并使用一个公共接口来处理它。但是我在创建类型后处理它时遇到了一些问题。这个例子可能会显示我正在尝试做什么以及我的意思如何在Haskell中转换用户数据类型,haskell,Haskell,我正在尝试定义自己的数据类型,并使用一个公共接口来处理它。但是我在创建类型后处理它时遇到了一些问题。这个例子可能会显示我正在尝试做什么以及我的意思 type Type1 = (Int, Int) data Type2 = Type2 [Type1] deriving (Show, Read) add_elem type1 type2 = Type2 (type1 : type2) 我得到一个错误,type2的预期类型是[Type1],但收到的却是type2。这很好——我不希
type Type1 = (Int, Int)
data Type2 = Type2 [Type1] deriving (Show, Read)
add_elem type1 type2 =
Type2 (type1 : type2)
我得到一个错误,type2的预期类型是[Type1],但收到的却是type2。这很好——我不希望人们弄乱我的数据类型的内部结构,这就是强类型和封装的好处所在。但我希望能够在我的模块内实现这一点,以提供接口
我是不是完全走错了路?如果是,正确的方法是什么;否则,当我想将Type2转换为[Type1]时,如何将其转换为模式匹配!Haskell基本上有两个关于数据类型的基本操作
Type2::[Type1]->Type2
这样的函数。您可以使用它们来构建各种类型-- For your case
toT1s :: Type2 -> [Type1]
toT1s (Type2 as) = as
这里,type2as
是一个模式匹配,它将Type2
中的值绑定到as
data Type2 = Type2 {toT1s :: [Type1]}
这是完全相同的,但节省了一些打字
要了解更多信息,我推荐一个好的Haskell教程。我最喜欢的是模式匹配!Haskell基本上有两个关于数据类型的基本操作
Type2::[Type1]->Type2
这样的函数。您可以使用它们来构建各种类型-- For your case
toT1s :: Type2 -> [Type1]
toT1s (Type2 as) = as
这里,type2as
是一个模式匹配,它将Type2
中的值绑定到as
data Type2 = Type2 {toT1s :: [Type1]}
这是完全相同的,但节省了一些打字
要了解更多信息,我推荐一个好的Haskell教程。我最喜欢的是你遗漏了
add_elem
@GabrielGonzalez的类型签名,因为Haskell正确推断了类型你遗漏了add_elem
@GabrielGonzalez的类型签名,类型签名是不必要的,因为Haskell正确地推断了类型我在Learn You A Haskell中遗漏了这一点。我知道我做错了什么,但不知道是什么。谢谢,这太完美了!(当然答案是模式匹配)我在《向你学习哈斯卡尔》中错过了这个。我知道我做错了什么,但不知道是什么。谢谢,这太完美了!(答案当然是模式匹配)