
Matthew Pocock wrote:
Hi,
I've been working a lot with maps, sets and lists. While the process of getting things out of them is abstracted by foldable, traversable and friends, the process of building one up is not. Would it be possible to have something like:
class Buildable b where empty :: b a --makes an empty b with elements of type a insert :: a -> b a -> b a --inserts the new element into the buildable
Another approach uses : singleton :: a -> b a and then just mappend :: b a -> b a -> b a i.e. make b a into a Monoid. singleton = pure = return, if there happens to be a Monad/Applicative instance around. And indeed there *will* be a Monad, if there is a sensible way of defining concat :: b (b a) -> b a, which there probably is. Jules