[Haskell-cafe] Deriving instances with GADTs
Tim Cowlishaw
tim at timcowlishaw.co.uk
Thu Aug 4 08:57:46 CEST 2011
Hi all,
I've been writing a DSL to describe securities orders, and after a lot
of help from the kind folk of this list and #haskell have come up with
the following implementation, using generalised algebraic data types:
https://gist.github.com/1124621
Elsewhere in my application, I make use of the order type defined
therein in the following newtype declaration:
newtype OrderListLevel s = OrderListLevel {orders :: [Order s Limit]}
deriving (Eq, Show)
However, the 'deriving' clause here fails:
src/Simulation/OrderList.hs:9:82:
No instance for (Eq (Order s Limit))
arising from the 'deriving' clause of a data type declaration
at src/Simulation/OrderList.hs:9:82-83
src/Simulation/OrderList.hs:9:86:
No instance for (Show (Order s Limit))
arising from the 'deriving' clause of a data type declaration
at src/Simulation/OrderList.hs:9:86-89
I don't fully understand this - the error is correct that there is no
instance of either Eq or Show for (Order s Limit), however, instances
are defined for Order Buy Limit and Order Sell Limit, and since these
are the only possible types that a value can be constructed with (the
type constructor is 'closed' over these types in some sense I guess),
it seems to me that this should provide enough information to derive
the Eq and Show instances. Am I making unreasonable expectations of
ghci's instance-deriving mechanism here, or missing something obvious?
Many thanks in advance,
Tim
More information about the Haskell-Cafe
mailing list