ark*_*ate 0 haskell types functional-programming
我是一名新手,过去没有任何函数式编程经验(但是,相当多的程序/命令式编程经验).我在理解如何声明自己的数据类型时遇到了一些麻烦.
例如,假设我声明了一种数据类型:
data SomeThing = Int [Int]
Run Code Online (Sandbox Code Playgroud)
你将如何编写一个消耗someData并产生someData的Haskell函数; 只有生成数据的Int是消耗数据的[Int]中所有元素的总和,并且消耗值的[Int]在生成的[Int]中每个元素乘以2.
这显然是可能的,但我没有找到任何在网络搜索后对我有意义的答案.
首先,您的数据类型声明中存在错误.从您的问题,您需要一个包含一个Int和一个列表的数据类型Int,但您缺少一个数据构造函数1.这是在模式匹配时或在构造数据类型的新值时使用的标签.
data SomeThing = SomeThingConstr Int [Int]
Run Code Online (Sandbox Code Playgroud)
当只有一个时,将构造函数命名为与数据类型本身相同的东西是很常见的,但我在这里给它们单独的名称以避免混淆.
现在,使用模式匹配和此数据构造函数编写函数很容易.
foo :: SomeThing -> SomeThing
foo (SomeThingConstr _ xs) = SomeThingConstr (sum xs) (map (*2) xs)
Run Code Online (Sandbox Code Playgroud)
1或者说,您有一个名为的数据构造函数Int,这显然不是您的意思.