假设我在 Haskell 中有以下功能:
compose2 = (.) . (.)
我将如何找到这个函数的类型?由于有多种组合,我在试图确定此函数的类型时遇到困难。
我知道我可以:t compose2用来获取类型。但是,我想知道如何在没有计算机帮助的情况下做到这一点。我应该采取哪些步骤来查找类型?
我试图理解为什么类型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
但我不明白如何继续.
答案是:(a -> b) -> (c -> d -> a) -> c -> d -> b
但我不知道怎么去那里。
haskell types type-inference currying parametric-polymorphism
我现在正在学习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)
另一方面确实有效。
为什么我必须在排序时添加第二个点并在其周围添加括号?