分页: 1 / 1
这段 Haskell 如何弄成 point-free 的?
发表于 : 2012-03-05 21:38
由 lilydjwg
[haskell]
addNumber :: String -> String
addNumber s = unlines $ zipWith (numberWithIndent (getIndent ls) (nrWidth $ length ls)) [1..] ls
where ls = lines s
[/haskell]
Re: 这段 Haskell 如何弄成 point-free 的?
发表于 : 2012-03-11 22:23
由 Fermat618
好多括号,我喜欢。你应该把美元符改成括号,这样就更漂亮了。

Re: 这段 Haskell 如何弄成 point-free 的?
发表于 : 2012-03-22 12:55
由 tangboyun
[haskell]
addNumber :: String -> String
addNumber = unlines . (\e -> zipWith (numberWithIndent (getIndent e) (nrWidth $ length e)) [1..]) . lines
[/haskell]
整成这种?难读不少阿,还有就是函数写成这种形式,如果不显式注明签名式的话,而参数又是多态的话,可能会遇到Monomorphism Restriction方面的错误,不知道的话,很难debug。point free除非是那种很短的语句,否则没太大意思的。
Re: 这段 Haskell 如何弄成 point-free 的?
发表于 : 2012-03-22 14:32
由 lilydjwg
tangboyun 写了:[haskell]
addNumber :: String -> String
addNumber = unlines . (\e -> zipWith (numberWithIndent (getIndent e) (nrWidth $ length e)) [1..]) . lines
[/haskell]
整成这种?难读不少阿,还有就是函数写成这种形式,如果不显式注明签名式的话,而参数又是多态的话,可能会遇到Monomorphism Restriction方面的错误,不知道的话,很难debug。point free除非是那种很短的语句,否则没太大意思的。
不是,匿名函数里还有参数呢。
我只是想看看它怎么变成 point free 的,没准备实用的。
Re: 这段 Haskell 如何弄成 point-free 的?
发表于 : 2012-03-23 8:45
由 tangboyun
你这个要完全去掉太难了,我推了一会儿放弃了。有两个地方有依赖,还都是在一个函数内部的。
我觉得要curry化的话,最好是那种没依赖的。
Re: 这段 Haskell 如何弄成 point-free 的?
发表于 : 2012-04-14 23:00
由 lilydjwg
知道了:
22:59 <lilydjwg> @pl \s -> let ls = lines s in unlines $ zipWith (numberWithIndent (getIndent ls) (nrWidth $ length ls)) [1..] ls
22:59 <lambdabot> unlines . (flip zipWith [1..] =<< liftM2 numberWithIndent getIndent (nrWidth . length)) . fix . const . lines
Re: 这段 Haskell 如何弄成 point-free 的?
发表于 : 2012-04-16 8:49
由 tangboyun
这个自动推导牛的。。。要读懂就要在纸上来回推几回了