Proposal: making inits and tails less strict
Ivan Lazar Miljenovic
ivan.miljenovic at gmail.com
Fri Mar 18 00:58:26 CET 2011
On 18 March 2011 06:25, Bas van Dijk <v.dijk.bas at gmail.com> wrote:
> I would like to propose making inits and tails less strict:
>
> inits :: [a] -> [[a]]
> -inits [] = [[]]
> -inits (x:xs) = [[]] ++ map (x:) (inits xs)
> +inits xs = [] : case xs of
> + [] -> []
> + x:xs -> map (x:) (inits xs)
>
> tails :: [a] -> [[a]]
> -tails [] = [[]]
> -tails xxs@(_:xs) = xxs : tails xs
> +tails xxs = xxs : case xxs of
> + [] -> []
> + _:xs -> tails xs
>
> Having a lazier inits allows the elegant:
> nats = map length (inits nats)
> which loops for the current definition. This definition was due to John Tromp:
> http://www.mail-archive.com/haskell@haskell.org/msg21044.html
I'm not against this proposal, but am just curious: is there any
reason/need for this lazier definition apart from an elegant (but
possibly not actually needed/useful) trick?
--
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
IvanMiljenovic.wordpress.com
More information about the Libraries
mailing list