| stringType :: String -> Q [Dec] | stringType s = [| | newtype $s = $s String | show$s :: $s -> ShowS | show$s ($s x) = showString x | instance Show $s where | showsPrec _ x = show$s x | instance Eq $s where | ($s x) ($s y) = (x==y) | |] Yes, that's part of what we had in mind (see Section 5 of http://research.microsoft.com/~simonpj/tmp/notes.ps). You'd have to say: stringType :: String -> Q [Dec] stringType s = [| newtype $tc_var = $con_var String $show_var :: $tc_var -> ShowS $show_var ($con_var x) = showString x instance Show $tc_var where showsPrec _ x = $show_var x instance Eq $tc_var where ($con_var x) ($con_var y) = (x==y) |] where tc_var = mkVar s con_var = mkVar s show_var = mkVar ("show" ++ s)
participants (1)
-
Simon Peyton-Jones