Haskell中的读取函数

时间:2016-04-21 17:33:37

标签: haskell

我是Haskell语言的新手,我对read函数有一些问题。 确切地说,我理解:

read "8.2" + 3.8

应该返回12.0因为我们想要返回与第二个成员相同的类型。 我不能真正得到的是为什么:

read "True" || False

回归真实吗?好吧,它返回了与False相同的类型,这是布尔值,但我不明白为什么是第一个成员。我想我有一个模糊的想法,比如,在这种情况下返回函数将返回第一个成员,因为条件是|| ? 请帮帮我。另外,我很抱歉,如果这对你们大多数人来说都是基本的,但我真的想要了解它。

2 个答案:

答案 0 :(得分:9)

跟随ghci!

Prelude> let x = read "True"
Prelude> :t x
x :: Read a => a

所以x没有具体的类型。当我们要求时,x是一种表达式,可以提供具体类型的值。我们可以要求x成为IntBool或我们想要的任何内容。特别是:

Prelude> x :: Bool
True

我们也可以要求它是Int

Prelude> x :: Int
*** Exception: Prelude.read: no parse

但它未能成为一个。

因此,在您的代码段中,我们何时会要求它成为某种东西?

Prelude> :t (||)
(||) :: Bool -> Bool -> Bool

函数(||)需要Bool,因此它要求其参数成为Bool。正如我们已经看到的,当我们要求x成为Bool时,它会成为BoolTrue。所以说:

Prelude> x || False
True

就像说:

Prelude> True || False
True

(||)代表the logical OR operation,因此结果为True

答案 1 :(得分:4)

True read "True" && False

返回第一个成员,而是返回or-operation

的结果

你应该试试

True || _ = True

看到差异

可能是一个轻微的评论/补充:

从某种意义上说,你返回第一个组件的权利 - 只是因为True || undefined所以即使Prelude> read "True" || undefined True 也没问题:

sails