Proposal: making inits and tails less strict

Edward Kmett ekmett at gmail.com
Fri Mar 18 00:25:46 CET 2011


+1

On Thu, Mar 17, 2011 at 3:25 PM, Bas van Dijk <v.dijk.bas at gmail.com> wrote:

> Hello,
>
> 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
>
> Discussion deadline: 2 weeks.
>
> Regards,
>
> Bas
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20110317/f207c326/attachment.htm>


More information about the Libraries mailing list