<div dir="ltr">On Sat, Dec 3, 2016 at 2:32 PM, David Feuer <span dir="ltr"><<a href="mailto:david.feuer@gmail.com" target="_blank">david.feuer@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">You can also sift monomorphic containers using my class, which should probably be called MonoSiftable.<div dir="auto"><br></div><div dir="auto">data IntList = Cons !Int IntList | Nil</div><div dir="auto"><br></div><div dir="auto">instance Siftable Int IntList where</div><div dir="auto">  sift _ Nil = Nil</div><div dir="auto">  sift p (Cons x xs)</div><div dir="auto">    | p x = Cons x (sift p xs)</div><div dir="auto">    | otherwise = sift p xs</div></div></blockquote><div><br></div><div>You can also use it with contra-variant or invariant type constructors, e.g.,</div><div><br></div><div>instance Siftable a (a -> Bool) where</div><div>    sift f g = \x -> f x && g x</div></div><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Dave Menendez <<a href="mailto:dave@zednenem.com" target="_blank">dave@zednenem.com</a>><br><<a href="http://www.eyrie.org/~zednenem/" target="_blank">http://www.eyrie.org/~zednenem/</a>></div>
</div></div>