Following your earlier advice, I have tried replacing the line
diamondLayer :: (Enum b', Num b') => b' -> [(b', b')]
with both
diamondLayer :: (Enum b', Num b', Eq b') => b' -> [(b', b')]
This one is correct; you also need to add it to the definition of diamond on line 231, or the error will move there. (I *think* that is sufficient, but it may be necessary to track down other places where the constraint must be added, as the compiler reports them.)
-- brandon s allbery allbery.b@gmail.com wandering unix systems administrator (available) (412) 475-9364 vm/sms