如何在Haskell中创建单例函数

时间:2016-11-22 21:12:32

标签: haskell

所以我需要在Haskell中创建一个我们应该使用这种数据类型的模块

data List x = LT [(x,[String])]

并实现此功能singleton :: x -> List x

我一直在寻找我的解决方案singleton elem = LT [(elem,[])]是否正确,但找不到。

我能在哪里找到简单易懂的例子吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

由于x是不受限制的类型变量,singleton无法自行生成类型x的有效值。它只能做两件事之一:

  1. 使用收到的x类型的参数。
  2. 使用undefined
  3. 您的定义肯定是该函数的合理定义;但是,没有其他信息可以继续,以下内容 也是singleton :: x -> List x有效定义:

    1. singleton elem = LT [(undefined,[])]
    2. singleton elem = LT []
    3. singleton elem = LT [(elem,[]), (elem,[])]
    4. singleton elem = LT [(elem,["foo"])]
    5. singleton elem = LT [(elem,["foo", "bar"])]
    6. 第一个使用undefined作为x类型的值。第二个和第三个利用了要返回的列表的 length 未指定的事实。第四个和第五个利用了以下事实:既没有指定具体类型[String]的值的长度也没有指定内容。

相关问题