{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, CPP #-} import Data.Time #define as :: class Cast a c where cast :: a -> c instance Show a => Cast a [Char] where cast = show instance Cast UTCTime Day where cast = utctDay main = do now <- getCurrentTime print (cast now as String) print (cast now as Day) print (cast (cast now as Day) as String)