Haskell中的"多种类型"

Vla*_*che 1 haskell functional-programming

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

data Rets = Int | String | Bool

checkInt :: Rets -> Bool
check x = case x of
    Int x -> True
Run Code Online (Sandbox Code Playgroud)

checkInt应该返回,True如果给出Int,它只是为了测试,但无论如何我包括它.

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

sep*_*p2k 5

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

你想要的是这样的:

data Rets = IntRet Int | StringRet String | BoolRet Bool
Run Code Online (Sandbox Code Playgroud)

这定义了一个名为三个构造IntRet,StringRet以及BoolRet,其采取Int,StringBool分别.这样你就可以使用等来构造值IntRet 42,BoolRet True然后将它们模式匹配IntRet x,依此类推.