
Why not? import Data.Number.Nat as N lastN :: Integral b => b -> [a] -> [a] lastN n xs = N.drop (N.length xs - n') xs where n' = N.toNat n Not import Prelude maybe make more clear. []'s Henrique Becker

On Sun, Sep 19, 2010 at 5:01 PM, Henrique Becker
Why not?
import Data.Number.Nat as N
lastN :: Integral b => b -> [a] -> [a] lastN n xs = N.drop (N.length xs - n') xs where n' = N.toNat n
Wow. That is gorgeous! I think it's basically the same idea as my "zipWith" implementation, but it is so much clearer here. Thanks :-) Luke

On Mon, Sep 20, 2010 at 5:11 PM, Luke Palmer
On Sun, Sep 19, 2010 at 5:01 PM, Henrique Becker
wrote: Why not?
import Data.Number.Nat as N
lastN :: Integral b => b -> [a] -> [a] lastN n xs = N.drop (N.length xs - n') xs where n' = N.toNat n
Wow. That is gorgeous! I think it's basically the same idea as my "zipWith" implementation, but it is so much clearer here. Thanks :-)
Er forget that zipWith comment. It is quite unlike that. But it is still beautiful and efficient.

Thanks, It's my first post.
If you not import Prelude is more clear (N. is horrible):
import Prelude ((-), Integral)
import Data.Number.Nat (drop, length, toNat)
lastN :: Integral b => b -> [a] -> [a]
lastN n xs = drop (length xs - n') xs
where n' = toNat n
P.S.: You benchmarked? I didn't...
2010/9/20, Luke Palmer
On Mon, Sep 20, 2010 at 5:11 PM, Luke Palmer
wrote: On Sun, Sep 19, 2010 at 5:01 PM, Henrique Becker
wrote: Why not?
import Data.Number.Nat as N
lastN :: Integral b => b -> [a] -> [a] lastN n xs = N.drop (N.length xs - n') xs where n' = N.toNat n
Wow. That is gorgeous! I think it's basically the same idea as my "zipWith" implementation, but it is so much clearer here. Thanks :-)
Er forget that zipWith comment. It is quite unlike that. But it is still beautiful and efficient.
participants (2)
-
Henrique Becker
-
Luke Palmer