所以我需要在Haskell中创建一个我们应该使用这种数据类型的模块
data List x = LT [(x,[String])]
并实现此功能singleton :: x -> List x
。
我一直在寻找我的解决方案singleton elem = LT [(elem,[])]
是否正确,但找不到。
我能在哪里找到简单易懂的例子吗?
提前致谢。
答案 0 :(得分:4)
由于x
是不受限制的类型变量,singleton
无法自行生成类型x
的有效值。它只能做两件事之一:
x
类型的参数。undefined
。您的定义肯定是该函数的合理定义;但是,没有其他信息可以继续,以下内容
也是singleton :: x -> List x
的有效定义:
singleton elem = LT [(undefined,[])]
singleton elem = LT []
singleton elem = LT [(elem,[]), (elem,[])]
singleton elem = LT [(elem,["foo"])]
singleton elem = LT [(elem,["foo", "bar"])]
第一个使用undefined
作为x
类型的值。第二个和第三个利用了要返回的列表的 length 未指定的事实。第四个和第五个利用了以下事实:既没有指定具体类型[String]
的值的长度也没有指定内容。