Fre*_*rik 10 haskell pointfree
如何结合使用$和无点风格?
一个明显的例子是以下效用函数:
times :: Int -> [a] -> [a]
times n xs = concat $ replicate n xs
Run Code Online (Sandbox Code Playgroud)
只是写入concat $ replicate产生错误,类似的是你不能写concat . replicate,因为concat期望值而不是函数.
那么你如何将上述功能转变为无点风格呢?
fuz*_*fuz 22
你可以使用这个组合器:(冒号提示两个参数如下)
(.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
(.:) = (.) . (.)
Run Code Online (Sandbox Code Playgroud)
它可以让你摆脱n:
time = concat .: replicate
Run Code Online (Sandbox Code Playgroud)
Fre*_*Foo 13
您可以轻松地编写几乎无点的版本
times n = concat . replicate n
Run Code Online (Sandbox Code Playgroud)
一个完全无点的版本可以通过明确的咖喱和不连续来实现:
times = curry $ concat . uncurry replicate
Run Code Online (Sandbox Code Playgroud)
Jos*_*Lee 12
上freenode并问lambdabot;)
<jleedev> @pl \n xs -> concat $ replicate n xs
<lambdabot> (join .) . replicate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |