However, Lennart Augustsson suggested splitting out the `bool`

function to a separate type class. Just like the `IfB`

type class you have in you `Boolean`

package.

I hadn’t thought of defining the generalized constructors and destructors to a data type in two separate type classes, and somehow had read over both of you using that. I’m definitely going to try to do this on all types in the AwesomePrelude to see if it works everywhere. Tomorrow, anyway.

]]>And I’m confused about the functional dependency: “f -> r”, in “bool :: r -> r -> f -> r”. I see that you have “Equal :: Expr Integer -> Expr Integer -> Expr Bool”, so I guess the dependency works out, but I guess it would break if you generalized at all. For instance, I’d want instead “Equal :: Eq a => Expr a -> Expr a -> Expr a” (plus an additional syntax-motivated constraints on a).

]]>