繁体   English   中英

了解Haskell(->)?

[英]Understanding Haskell's (->)?

在学习“高级” Haskell时,我很少看到(->) 当我尝试运行:t (->)ghci失败,以为有时甚至官方文档也使用此符号。

据我可以猜测(->)是在一个Hask 任何态射-基本上,任何Haskell的功能。 我假设这个想法是要修复源端点或目标端点:例如, ((->) Int)可能意味着Int类型的任何函数; 显然, (Int (->))表示Int任何函数。

下一个假设是(->)可能是endofunctor。 fmap实现看似微不足道:具有类型为a且定态为f :: a -> b fmap f :: a -> b的固定终结点可以生成((->) b)的实例。 它保留id ,但不会撕裂现有的合成:即fmap(g . f) = fmap(g) . fmap(f) fmap(g . f) = fmap(g) . fmap(f)

所以我的第一个问题是:我说的对吗?

我的第二个问题是为什么:t (->)ghci失败?

我的主要问题是,有没有一种方法可以在真实的Haskell代码中使用(->) 我是否需要启用一些{{ #Pragma ...扩展名? 还是仅是用于解释概念的理论概念?

最后, 最后一个问题 是否存在对偶概念(<-)

->是函数类型的类型构造函数。 f :: A -> B表示“ f是从某种类型A到某种类型B的函数”。

:t (->)是错误,因为->不是值,并且没有类型; 它是一个类型(或更确切地说是类型构造函数)。 同样, :t Maybe:t Int是错误。

与普通运算符一样,中缀应用程序是(咖喱)前缀应用程序的语法糖; 即就像x + y可以写成(+) xy((+) x) yA -> B可以写成(->) AB((->) A) B

((->) Int)并不意味着“ Int类型的任何函数”; 它是功能类型构造Int 它本身不是有效的类型,但是您可以将其应用于类型以获得有效的函数类型。 例如((->) Int) String是从IntString的函数类型。

(Int (->))是一种错误; 它尝试将Int应用于(->) ,但Int不接受任何参数。

(->) e实际上是任何类型eFunctor (具有fmap = (.) ,即函数组合)。 它也是一个ApplicativeMonad (相当于Reader )。

所有这些都是标准的Haskell语法。 不需要语言扩展。

<-在类型级别不存在。 这是保留的语法,可以在表达式中使用,例如在列表推导( [ x * 2 | x <- [0 ..] ] )或do块中( do { x <- p; return (x * 2) } ) ; 它还在其他一些上下文中使用,但不在类型中使用。

暂无
暂无

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

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