
Kyle Murphy schrieb: [...]
typeChecker a b = toConstr a == toConstr b
Right, that is (slightly) cleaner than using my "show" trick below.
On Tue, Aug 3, 2010 at 13:51, Alex Rozenshteyn
mailto:rpglover64@gmail.com> wrote: That is a dirty, dirty hack.
[...] Alternatively you could define your own enumeration type: data SchemeType = NumberT | BoolT | AtomT deriving Eq schemeTypeOf :: SchemeVal -> SchemeType schemeTypeOf v = case v of Number _ -> NumberT Bool _ -> BoolT Atom _ -> AtomT typeChecker = Data.Function.on (==) schemeTypeOf C.
> > numberP :: SchemeVal -> SchemeVal > numberP (Number _) = Bool True > numberP _ = Bool False > > boolP :: SchemeVal -> SchemeVal > boolP (Bool _) = Bool True > boolP _ = Bool False > > symbolP :: SchemeVal -> SchemeVal > symbolP (Atom _) = Bool True > symbolP _ = Bool False
[...]
typeChecker s1 s2 = let f = takeWhile isAlphaNum . show in Bool $ f s1 == f s2
hoping that my "f" just extracts the constructor as string.