【发布时间】:2017-09-23 06:05:58
【问题描述】:
我正在尝试用 99 个 Haskell 问题来学习 Haskell:
https://wiki.haskell.org/H-99:_Ninety-Nine_Haskell_Problems。
对于其中一个问题,我必须返回Element 的异构数组和(Int, Element) 形式的元组。由于 haskell 不允许在数组中存储异构数据,我能想到的最好的方法是
data Hetero a = Tuple (Int, a) | Elem a deriving (Show, Ord, Eq)
然后像这样写我的函数:
myFunk [a] -> [Hetero a]
-- Rest of the function
但是我的结果看起来像这样:
[Tuple (2, 10), Elem 1]
有没有办法可以修改我的数据类型或函数以返回类似的东西
[(2, 10), 1]
【问题讨论】:
-
[(2, 10), 1]的类型是什么? -
我明白你的意思,认为它也应该是另一个用户定义的类型
-
如果你只是想让它显示得很好,你可以将两者都映射到
String,这样它就会变成["(2, 10)", "1"]。但是,您不能为此使用show的默认实例,因为(IIRC)它将Tuple (2, 10)呈现为"Tuple (2, 10)"。 -
这99个问题不过是麻烦。它们真的不是为 Haskell 编写的。你已经解决了问题;继续前进!
-
正如@dfeuer 所写,您已经解决了问题。这就是在 Haskell 中完成的方式。
标签: haskell