((<*>) . (<*>))
--In GHCi
:: (a1 -> a2 -> b) -> ((a1 -> a2) -> a1) -> (a1 -> a2) -> b
:t ((<*>) .)
((<*>) .)
:: Applicative f => (a1 -> f (a2 -> b)) -> a1 -> f a2 -> f b
:t (. (<*>))
(. (<*>))
:: Applicative f => ((f a -> f b) -> c) -> f (a -> b) -> c
((<*>) . (<*>))
--from left to right
(<*>)::应用f1=>f1(a1->b1)->f1 a1->f1 b1
;(.)::(b->c)->(a->b)->a->c
;(<*>)::应用f2=>f2(a2->b2)->f2 a2->f2 b2
;在2.(a->b)
中,设3。F2(A2->b2)=A
;因此,b
应为f2 A2->f2 B2
,(B->c)
,替换为1。,b
为f1(A1->b1)
,c
应为f1 A1->f1 b1
但是,b
应该彼此相等,f2 a2->f2 b2=f1(a1->b1)
?如何使两者在GHCi中相互适应,它似乎用A1
或A2
代替了F(a->b)
,那么它是如何前进的呢?
据我所知,你的推理是正确的。
下一步,正如您所写的,是解决
f2 a2 -> f2 b2 = f1 (a1 -> b1)
也就是说,用前缀表示法,
(->) (f2 a2) (f2 b2) = f1 (a1 -> b1)
(->) (f2 a2) = f1
f2 b2 = a1 -> b1 = (->) a1 b1
(->) (f2 a2) = f1
f2 = (->) a1
b2 = b1
a = f2 (a2 -> b2)
= (->) a1 (a2 -> b2)
= a1 -> a2 -> b2
= a1 -> a2 -> b1
c = f1 a1 -> f1 b1
= (->) (f2 a2) a1 -> (->) (f2 a2) b1
= (f2 a2 -> a1) -> (f2 a2 -> b1)
= ((->) a1 a2 -> a1) -> ((->) a1 a2 -> b1)
= ((a1 -> a2) -> a1) -> (a1 -> a2) -> b1
a -> c =
= (a1 -> a2 -> b1) -> ((a1 -> a2) -> a1) -> (a1 -> a2) -> b1
函数组合是将一个函数的输出用作另一个函数的输入的过程。在数学中,合成用表示,其中是一个函数,其输出用作另一个函数(即)的输入。 如果一个函数的输出类型与第二个函数的输入类型匹配,则可以使用这两个函数来实现函数组合。我们使用点运算符()在Haskell中实现函数组合。 看下面的示例代码。演示如何使用函数组合来计算输入数字是偶数还是奇数。 在这里,在函数中,同时调用了两个函数和。编译器将首先以作为参数
函数在Haskell中起主要作用,因为Haskell是一种函数式编程语言。与其他语言一样,Haskell确实具有自己的函数定义和声明。 函数声明由函数名称,其参数列表以及其输出组成。函数定义是实际定义函数的地方。让我们看看一个添加函数的示例,以详细了解此概念。 在这里,在第一行中声明了函数,在第二行中,我们编写了实际的函数,该函数将带有两个参数并产生一个整数类型的输出。 与大多数其他语言一样,Ha
到目前为止,我们已经讨论了许多类型的Haskell函数,并使用了不同的方式来调用这些函数。在本章中,将学习一些可以在Haskell中轻松使用的基本函数,而无需导入任何特殊的类。这些函数大多数都是其他高阶功能的一部分。 1. head函数 Head函数适用于列表。它返回输入参数的第一个,参数基本上是一个列表。在下面的示例中,我们传递一个包含个值的列表,并使用函数返回列表的第一个元素。 示例代码: 执
我现在在学习哈斯克尔。但我正在为“类型”而挣扎。 例如,函数的类型是
问题内容: 我想使用Python的某些Haskell库(例如Darcs,Pandoc),但似乎在Python中没有直接的Haskell外部函数接口。有什么办法吗? 问题答案: 只要您可以获取Python代码来调用C,就可以调用已通过FFI导出的Haskell函数 另一种方法是编写标准IPC接口,在darcs和pandoc的情况下,仅将它们称为原始可执行文件,然后解析其输出可能是可行的方法。 至于在
有没有一种方法可以在Haskell中有类似于创建“构造函数别名”的东西?我的想法与类型别名类似,您可以给类型一个不同的名称,但它仍然以别名类型的方式表现。 我的用例是一个系统,其中我有一个指定的时间作为我要建模的一些对象的属性,所以。其中一些可能是“可变”时间,这意味着它可能还没有被分配一个时间,或者它拥有的时间是“可移动的”。所以。 我非常肯定我对Haskell非常了解,可以说不存在构造函数别名