Evan Martin (evan) wrote in evan_tech,
Evan Martin
evan
evan_tech

powerset

Beautiful Haskell implementation of math's "power set":
import Control.Monad

powerset :: [a] -> [[a]]
powerset = filterM (const [True, False])


And powerset [1,2,3] produces [[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]].

Oh man is that hard for me to grok, mostly because I haven't internalized the list monad.
(It helped me to write out the definition of filterM, which has type Monad m => (a -> m Bool) -> [a] -> m [a].)

But roughly, it's saying "for each assignment of true and false over the values of the list, grab the true values".

[via Adam Langley via a private mailing list]
Tags: haskell
Subscribe

  • no go

    Two friends of mine were pretty enthusiastic about the Go language, so I tried writing a program in it yesterday. It is frustrating because despite…

  • fonts on linux

    I wrote a document on how to diagnose font problems on Linux. I would appreciate feedback, corrections, other common misconfigurations, etc.

  • playing with vala

    I actually was toying with making something like Vala back in college. It's pretty cute. Much like using the sane subset of C++, as you write code…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 8 comments