
At 2002-01-18 18:59, Ahn Ki-yung wrote:
Each of these Set types takes a string, but the membership test is different. This is an annoying case in Haskell, because you can make a String a member of the Eq typeclass in only one way.
Your example seemed to translate into Haskell quite straightforwardly... module FunctorTest where { import Char; lowercase = fmap toLower; data EQ' t = EQ' { eq :: t -> t -> Bool }; data SET elt set = SET { empty :: set, add :: elt -> set -> set, mem :: elt -> set -> Bool }; fSet :: EQ' t -> SET t [t]; fSet mEq = SET { empty = [], add = \elt set -> elt:set, mem = let { mm elt [] = False; mm elt (x:xs) = if eq mEq x elt then True else mm elt xs; } in mm }; sensitiveCase :: EQ' String; sensitiveCase = EQ' { eq = \s s' -> s == s' }; insensitiveCase :: EQ' String; insensitiveCase = EQ' { eq = \s s' -> (lowercase s) == (lowercase s') }; sensitiveSet = fSet(sensitiveCase); insensitiveSet = fSet(insensitiveCase); } -- Ashley Yakeley, Seattle WA