在Haskell中进行类型比较

Ric*_*ein 2 haskell

我还只是学习Haskell的基础知识,我试图找到一个答案,这个简单的问题,所以我提前道歉,因为我敢肯定,这很简单.

鉴于:

data Fruit = Fruit| Apple | Orange
    deriving (Show, Eq)

a = Apple
Run Code Online (Sandbox Code Playgroud)

如何检查某些水果是否合适?

Joe*_*ams 13

假设你真的意味着类型比较,简单的答案是"你不能".Haskell是静态类型的,因此检查在编译时完成,而不是在运行时完成.所以,如果你有这样的功能:

foo :: Fruit -> Bool
foo Apple = True
foo x     = False
Run Code Online (Sandbox Code Playgroud)

是否x是水果的答案总是"是".

您可能要做的是找出构造给定值的数据构造函数.为此,请使用模式匹配:

fruitName :: Fruit -> String
fruitName Fruit  = "Fruit"
fruitName Apple  = "Apple"
fruitName Orange = "Orange"
Run Code Online (Sandbox Code Playgroud)

顺便说一下,如果你正在使用GHCi,而你想知道某种类型,请使用 :t

> let a = 123
> :t a
a :: Integer
>
Run Code Online (Sandbox Code Playgroud)

  • @Richard Hein:让你​​绕过世界上最强大的类型系统之一.即使它使用安全,事后通常也会变得更加复杂.想想一个不需要这个的解决方案. (2认同)