Haskell中的函数合成问题
所以。。。我写这篇文章是为了从用户那里得到5个矩形:Haskell中的函数合成问题,haskell,io,function-composition,Haskell,Io,Function Composition,所以。。。我写这篇文章是为了从用户那里得到5个矩形: rectangles <- sequence . take 5 . cycle [getRect] [编辑] 我知道(.)代表函数组合,$代表应用程序,但我的组合应该返回函数并应用[getRect]。难道不是吗 我从纯数学的角度来看这个问题。这么说吧 cycle : a -> b take 5 : b -> c -- partially applied sequence : c -> d 那为什么我的作文不好写呢
rectangles <- sequence . take 5 . cycle [getRect]
[编辑]
我知道(.)代表函数组合,$代表应用程序,但我的组合应该返回函数并应用[getRect]。难道不是吗
我从纯数学的角度来看这个问题。这么说吧
cycle : a -> b
take 5 : b -> c -- partially applied
sequence : c -> d
那为什么我的作文不好写呢?它应该是一个参数为[getRect]的函数,如下所示:
(sequence . take 5 . cycle)([getRect]) : a -> d
其中,
a
是[getRect],而d
是IO操作的结果。函数应用程序绑定比()
更紧密
sequence . take 5 . cycle [getRect]
与
sequence . take 5 . (cycle [getRect])
由于cycle[getRect]
是一个列表,而不是一个函数,因此会出现错误
可以使用括号获得所需的优先级:
rectangles <- (sequence . take 5 . cycle) [getRect]
函数应用程序绑定比
(.)更紧密
sequence . take 5 . cycle [getRect]
与
sequence . take 5 . (cycle [getRect])
由于cycle[getRect]
是一个列表,而不是一个函数,因此会出现错误
可以使用括号获得所需的优先级:
rectangles <- (sequence . take 5 . cycle) [getRect]
我想你误解我了。你能再看看我的问题吗?我没有在循环后使用(.),我已经给我的组合函数留出了空间来应用[getRect]
。现在我注意到我应该把take 5
用大括号括起来,因为它应该返回部分应用的函数,这样它就把()
作为第二个参数,但它仍然不起作用。@Reygoch-函数应用程序绑定得比(.)
更紧密,所以取5。循环[getRect]
为取5。(cycle[getRect])
我想你误解了我的意思。你能再看看我的问题吗?我没有在循环后使用(.),我已经给我的组合函数留出了空间来应用[getRect]
。现在我注意到我应该把take 5
用大括号括起来,因为它应该返回部分应用的函数,这样它就把()
作为第二个参数,但它仍然不起作用。@Reygoch-函数应用程序绑定得比(.)
更紧密,所以取5。循环[getRect]
为取5。(循环[getRect])