Proposal: Add Foldable helper to Control.DeepSeq

Andreas Abel abela at chalmers.se
Thu Jul 14 09:38:01 UTC 2016


+1 LGTM

On 14.07.2016 05:16, David Feuer wrote:
> As I describe in https://github.com/haskell/deepseq/issues/17 it is
> possible to implement an NFData instance for any Foldable type, and we
> can offer a function to help do that:
>
> data Unit = Unit
>
> instance Monoid Unit where
>    mempty = Unit
>    Unit `mappend` Unit = Unit -- strict in both arguments, unlike ()
>
> rnfFoldable :: (Foldable f, NFData a) => f a -> ()
> rnfFoldable xs = foldMap (\x -> rnf x `seq` Unit) xs `seq` ()
>
> This could be used like so:
>
> instance NFData a => NFData (F a) where
>    rnf = rnfFoldable
>
> This version forces from left to right. It would be possible to offer
> another version that forces from right to left:
>
> data Unit2 = Unit2
>
> instance Monoid Unit2 where
>    mempty = Unit2
>    x `mappend` Unit2 = x `seq` Unit2
>
> rnfFoldableRTL :: (Foldable f, NFData a) => f a -> ()
> rnfFoldableRTL xs = foldMap (\x -> rnf x `seq` Unit2) xs `seq` ()
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>


-- 
Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/


More information about the Libraries mailing list