Not tested but maybe adding an Eq instance to your datatype would help? So try changing 'deriving (Show)' to 'deriving (Show, Eq)'. On Fri, Sep 22, 2017 at 2:55 PM, Matt Williams <matt.williams45.mw@gmail.com
wrote:
Apologies - sent too soon - code edited below
Dear All,
I am having problems writing a polymorphic function.
I have a type that has two constructors:
data Arg = IndArg {evi::Evi, t1::Treatment, t2::Treatment, out::Outcome, dir::Direction} | MetaArg {target::EviType} deriving (Show)
I have a function checks for conflict:
checkConflict :: Arg -> Arg -> Bool checkConflict a b = if t1 a == t1 b && t2 a == t2 b && dir a /= dir b then True else False
However, I can't make this work with both types of Argument - if I pass it MetaArg, it raises an error.
In another language, I would write something like:
checkConflict(ArgA,ArgB):
if type(ArgA) == IndArg: <do this> elif type(ArgA) == MetaArg: <do other>
Any thoughts would be welcomed.
BW, Matt
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners