{-# LANGUAGE MultiParamTypeClasses #-}
import Data
.Char (toUpper
, toLower
)
class Make a where
instance Make Lower where
make s = Lower (toLowerStr s)
instance Make Mixed where
make s = Mixed s
instance Make Upper where
make s = Upper (toUpperStr s)
class Convert a b where
convert :: a -> b
instance Convert Lower Lower where
instance Convert Lower Mixed where
convert (Lower s) = Mixed s
instance Convert Lower Upper where
convert (Lower s) = Upper (toUpperStr s)
instance Convert Mixed Lower where
convert (Mixed s) = Lower (toLowerStr s)
instance Convert Mixed Mixed where
instance Convert Mixed Upper where
convert (Mixed s) = Upper (toUpperStr s)
instance Convert Upper Lower where
convert (Upper s) = Lower (toLowerStr s)
instance Convert Upper Mixed where
convert (Upper s) = Mixed s
instance Convert Upper Upper where
main
= print (convert
((make
"Hello World") :: Lower
) :: Upper
)