小编Nic*_*rus的帖子

Haskell中的const(++)类型

我试图理解(++)Haskell中表达式const的类型.我知道各种类型的const(++)我知道您可以省略参数以返回部分应用的函数.

如果我输入,:t const (++)我会const (++) :: b -> [a] -> [a] -> [a].我想的方式是(++)想要两个列表(我知道Haskell中的所有函数都是curried函数,实际上只接受一个参数)并返回一个列表.这个列表是const函数的第一个参数,它等待一个参数.所以,我认为类型会是const (++) :: [a] -> [a] -> b -> [a].

但是例如:const (++) 1 "hello" "you"返回"helloyou".为什么从const操作中返回的东西不是第一个参数,根据其定义constconst x _ = x什么?在我的思考过程中我不正确?

haskell

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

fxy = 3 + y/x,无点形式

我试图弄清楚f x y = 3 + y/xHaskell中的点自由形式.我认为会是f = (3.0+) . flip (/),但答案是f2 = curry $ (3.0+) . (uncurry $ flip (/)),这与f1 = curry ((3.0+) . (uncurry (flip (/))))我得到的答案是一样的,但在开始之前翻转和咖喱之前是不接受的.

我看到该版本是如何工作的,但我不确定为什么需要curry和uncurry函数,为什么我的版本不起作用?(3.0+)is 的类型a -> a,我认为如果你flip (/)通过函数组合用结果形式输入该函数,但是会(3.0+) . flip (/) 2 10导致错误(为什么?)并且不会产生8.是不是多余的,然后再次咖喱而不是咖喱?

haskell currying pointfree

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

类型(地图.地图)

我试图理解表达式的类型(map . map).由于类型(.)(b -> c) -> (a -> b) -> a -> c我不明白这是如何工作与地图功能,因为map取不与功能适应两个参数(b -> c)(a -> b).

haskell function-composition

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