On Fri, Mar 28, 2014 at 4:27 PM, David Menendez <dave@zednenem.com> wrote:
Well, “deriving (Eq, Show)” is a bit less wordy than “type role Foo representational representational”. Although I guess you could just do “type role Foo _ _ _”.

You forgot some stuff.

    #ifdef __GLASGOW_HASKELL__
    #if __GLASGOW_HASKELL__ >=  708 && __GLASGOW_HASKELL__ < ???
    type role Foo representational nominal representational
    #elif __GLASGOW_HASKELL >= ???
    -- insert whatever the future solution is to actually
    -- handle higher-order types; it will, without question,
    -- be different from the above role annotation.
    #endif
    #endif

    data Foo f x y = Foo (f x) y deriving (Eq, Ord, Show, Read)

Please add that to every type definition in your code. :)

-- Dan