Safe Haskell | None |
---|
Language.Haskell.DTC.Class
Description
Class definition from a data declaration.
- dataToClassWith :: String -> Decl -> Decl
- dataToClass :: Decl -> Decl
Functions
dataToClassWith :: String -> Decl -> DeclSource
Transform a data declaration to a class definition.
The String
argument will be the name of the type variable of the class definition.
dataToClass :: Decl -> DeclSource
Transform a data declaration to a class definition.
Equivalent to dataToClassWith "t"
.
Example
Let's see an example of how you can transform all data declarations in a module to class definitions.
Let the following module (Maybe.hs):
module MaybeExample where data Maybe a = Just a | Nothing
It contains the data declaration of the Maybe
type. Now, if we write:
import Language.Haskell.DTC main = do -- Parse the code. m <- parseModuleWithSrc "Maybe.hs" defaultParseMode -- Modify declarations with dataToClassWith. let m' = modifyHsDecls (map (dataToClassWith "m")) m -- Write the pretty-printed output. writeFile "MaybeC.hs" (prettyPrint m')
It produces the following output (in MaybeC.hs):
module MaybeExample where class Maybe m where just :: a -> m a fromJust :: m a -> a nothing :: m a