Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 应用函子。<*&燃气轮机;及<$&燃气轮机;详细地_Haskell_Applicative - Fatal编程技术网

Haskell 应用函子。<*&燃气轮机;及<$&燃气轮机;详细地

Haskell 应用函子。<*&燃气轮机;及<$&燃气轮机;详细地,haskell,applicative,Haskell,Applicative,我们有签名: ()::函子f=>(a->b)->f a->f b ()::应用程序f=>f(a->b)->f a->f b 让我们玩一下: (/)只有5个只有2个 =>只有2.5 )只有5)只有2 =>只有2.5 (刚好(\x->5/x))刚好2 =>只有2.5 问题: ((/) <$> Just 5) <*> Just 2 ^^^^^^^^^^^^^^^^ @@@@@@ (<$>) :: Functor f => (a -&g

我们有签名:

()::函子f=>(a->b)->f a->f b
()::应用程序f=>f(a->b)->f a->f b
让我们玩一下:

(/)只有5个只有2个
=>只有2.5
)只有5)只有2
=>只有2.5
(刚好(\x->5/x))刚好2
=>只有2.5
问题:

((/) <$> Just 5) <*> Just 2
^^^^^^^^^^^^^^^^     @@@@@@

(<$>) :: Functor f     =>   (a -> b) -> f a -> f b
                                               ^^^
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
                          ^^^^^^^^^^    @@@
((/)仅5)仅2
^^^^^^^^^^^^^^^^     @@@@@@
()::函子f=>(a->b)->f a->f b
^^^
()::应用程序f=>f(a->b)->f a->f b
^^^^^^^^^^    @@@
我认为^^^^部分应按其类型匹配。为什么签名中
的返回类型与
的输入类型在视觉上不匹配


我错过了什么?谢谢。

它确实匹配,但是
()
()
函数的
f
a
b
都是变量,每次使用该函数时,变量都是不同的变量

因此,在这里将函数定义为:

(<$>) :: Functor f     => (a -> b)   -> f a -> f b
(<*>) :: Applicative g => g (c -> d) -> g c -> g d
因此我们知道,
(/)的类型只有5个
fb
,而
g(c->d)
,而
只有2个
的类型是
gc
。由于
just2
具有类型
just2::Num n=>Maybe n
,因此这意味着
g~可能
c~n
(这里
x~y
意味着
x
y
是同一类型)。此外,我们可以推导出
fb~g(c->d)
,因此
f~可能
b~(c->d)

我们可以进一步分析
(/)仅5个
表达式。我们知道,
只有5个
具有类型
numm=>可能是m
,这意味着
a~m
。函数
(/)
有类型
(/)::分数k=>k->k->k
,这意味着
a~b~k~m
,因此我们知道
(/)只有5个
(/)有类型
(/)只有5个::(Num m,分数m)=>可能(m->m)
,或者更不那么详细的
(/)只有5个::分数m=>可能(m)
(a
分数m
表示
numm


正如我们已经发现的,
b~(c->d)
,这意味着
m~c~d
,因此表达式的类型是:
(/)只有5)只有2::分数m=>可能是m

提示:从写出
(/)的类型开始
并决定
a
b
是什么。请记住函数是通用的。谢谢。似乎您需要在以下位置进行一些更正:…因此我们知道,
(/)只有5具有类型(/)只有5:(Num m,分数m)=>可能(m->m)
你能给我更多关于Applicative的提示吗?我看到了常见的多参数fn应用程序
fx y z
和Applicative
fx y z
之间的相似性,但是我无法想象在通常的fn应用程序世界中有任何直接的相似之处?而且我觉得部分应用程序不知何故涉及到这里?
(/)只需5
,将导致
只需(/)5
,因此这里涉及部分应用程序,您是正确的。
只需(/)5)只需2
,然后导致
只需(/)52
,因此
只需2.5
。然而,为了计算
fx y z
,我们没有定义任何新函数(就像我们对……和……做的一样,我仍然错过了一些元素……你说“我们不定义任何新函数”是什么意思?)?
((/) <$> Just 5) <*> Just 2
^^^^^^^^^^^^^^^^     @@@@@@

(<$>) :: Functor f     => (a -> b)   -> f a -> f b
                                               ^^^
(<*>) :: Applicative g => g (c -> d) -> g c -> g d
                          ^^^^^^^^^^    @@@