"多种类型"在哈斯克尔

时间:2017-05-05 12:53:20

标签: haskell functional-programming

我对函数式编程和Haskell都是全新的,所以我不确定我是否正确地提出了这个问题,或者它是否有意义,但我决定尝试,因为我还没有找到任何有用的东西。我基本上试图实现一个可以返回IntString或列表的函数。我知道我可以使用Either返回两种类型之一,但我想返回三种或更多种中的一种。我尝试定义一个新类型,但我卡住了。

data Rets = Int | String | Bool

checkInt :: Rets -> Bool
check x = case x of
    Int x -> True
如果给出checkInt

True应返回Int,它只是用于测试,但无论如何我都包含了它。

我知道我的问题很乱,所以我会感谢任何解释。提前谢谢!

1 个答案:

答案 0 :(得分:5)

您定义了一个带有三个构造函数的类型,每个构造函数都有0个参数。因此Int x不是您的类型的有效模式,它只是Int -> true。当然这也意味着你不能在你的类型中存储任何值,因此它不能达到你想要的效果。

你想要的是这样的:

data Rets = IntRet Int | StringRet String | BoolRet Bool

这定义了三个名为IntRetStringRetBoolRet的构造函数,分别取IntStringBool。这样,您可以使用IntRet 42BoolRet True等构建值,然后将它们模式匹配为IntRet x,依此类推。