相关疑难解决方法(0)

在 Haskell 中查找组合函数的类型

假设我在 Haskell 中有以下功能:

compose2 = (.) . (.)

我将如何找到这个函数的类型?由于有多种组合,我在试图确定此函数的类型时遇到困难。

我知道我可以:t compose2用来获取类型。但是,我想知道如何在没有计算机帮助的情况下做到这一点。我应该采取哪些步骤来查找类型?

haskell types function-definition

3
推荐指数
1
解决办法
67
查看次数

乐趣类型gx = ys,其中ys = [x] ++ filter(curry gx)ys?

我试图理解为什么类型fun g x = ys where ys = [x] ++ filter (curry g x) ys((a, a) -> Bool) -> a -> [a].

我明白那个:

filter :: (a -> Bool) -> [a] -> [a] 然后 curry :: ((a, b) -> c) -> a -> b -> c

但我不明白如何继续.

haskell types unification

2
推荐指数
1
解决办法
182
查看次数

函数 g = (.).(.) 的类型是什么?

答案是:(a -> b) -> (c -> d -> a) -> c -> d -> b

但我不知道怎么去那里。

haskell types type-inference currying parametric-polymorphism

0
推荐指数
1
解决办法
147
查看次数

带排序和 (++) 的 Haskell 点运算符

我现在正在学习haskell,并试图找出前缀、中缀、优先级等的所有规则。

在尝试实现一个附加两个列表并对它们进行排序的函数时,我从以下开始:

appendAndSort :: [a] -> [a] -> [a]
appendAndSort = sort . (++)
Run Code Online (Sandbox Code Playgroud)

它不编译。

下列的:

appendAndSort :: Ord a => [a] -> [a] -> [a]
appendAndSort = (sort .) . (++)
Run Code Online (Sandbox Code Playgroud)

另一方面确实有效。

为什么我必须在排序时添加第二个点并在其周围添加括号?

haskell dot-operator

0
推荐指数
1
解决办法
130
查看次数