繁体   English   中英

Haskell中a-> b Bool类型是什么意思?

[英]What does the type a -> b Bool mean in Haskell?

我知道这种类型:

a -> Bool

是一个将类型a的东西作为输入并输出布尔值的函数。

键入什么:

a -> b Bool

意思?

b Boolb代表采用一个类型参数的参数化类型(在Haskell看来, b是类型* -> *的类型构造函数),例如MaybeIO[]

因此, a -> b Bool类型的函数可以采用一个Int并生成Maybe BoolIO Bool[Bool]等。

在这种情况下, b是种类更高的类型,即从类型到类型的函数。 听起来吓人吗? 不要怕! 更高种类的类型类似于列表类型。 ([])本身不是类型,但是它仍然需要一个参数才能成为一个类型,因此([]) Int = [Int]是一种类型。

种类就像类型的类型,完全应用类型的类型是* 另一方面,列表的类型为* -> * 因此,它采用类型* (例如Int )并返回类型(例如[Int] )。 其他示例可能是MaybeIO或具有类型* -> * -> *的函数类型(->) ,因为它仍然需要处理类型,参数类型和结果类型(例如(->) Int Bool = Int -> Bool )。

您提供的函数实际上是无法实现的,就像类型a -> b的函数一样。 但是,我们可以实现的功能如下:

pureEq :: (Eq a, Applicative b) => a -> a -> b Bool
pureEq x y = pure (x == y)

如果使用显式量化和种类注释将其写出,可能会更清楚。 a -> b Bool表示...

forall (a :: *) (b :: * -> *). a -> b Bool

因此, b是采用单个类型参数的类型构造函数。 单参数类型构造函数的示例比比皆是: Maybe []IO都是可用于实例化b的事物的示例。

函数f :: a -> b Bool接受任何类型a的参数; 它的返回值是您选择的类型构造函数,其参数填充为Bool

参数告诉我们,没有任何(非⊥)项具有这种类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM