### Finite sets

6 Jan 2013 08:05 pmSo, I just encountered a most delicious type the other day:

class Finite a where
assemble :: Applicative f => (a -> f b) -> f (a -> b)

What's so nice about it is that the only way you can implement it is if the type `a`

is in fact finite. (But see the notes.) So the questions are:

- Can you see why?
- Can you figure out how to implement it for some chosen finite type?
- Can you figure out how to implement it in general, given a list of all the values? (you may assume
`Eq a`

for this one) - Can you figure out how to get a list of all the values, given some arbitrary implementation of
`assemble`

?

**( A trivial note )**

**( A big note, also a hint perhaps )**