packages feed

DrIFT-2.4.0: example/Example.hs

{- example script for derive -}

module Example where
import Foo

{-! global : has,is !-} -- global to this module
{-!for Data derive : update,Show,Read!-} -- stand alone comand syntax 
{-!for Foo derive : test, Show,Read !-} -- apply rules to imported type
{-!for Maybe derive : test !-} -- apply rules to prelude type

data Data = D {	name :: Name,		
			constraints :: [(Class,Var)], 
			vars :: [Var],	
			body :: [(Constructor,[(Name,Type)])],
			derive :: [Class],
			statement :: Statement}
	   | FnType {	name :: Name,
			constraints :: [(Class,Var)],
			fntype :: Type}
	   | Fn	{	name :: Name,
			vars :: [Var]}	
	   | Directive
		 {-!derive : test!-} -- abbreviated syntax
{-!for Statement derive : Eq,Ord,Enum,Show,Read,Bounded !-}
{-!for Type derive : Eq,Ord,Enum,Bounded,Read !-}
data Statement = DataStmt | NewTypeStmt
type Name = String
type Var = String
type Class = String
type Constructor = String

data Type	= Arrow Type Type -- fn
		| Apply Type Type -- application
		| Var String	  -- variable
		| Con String      -- constructor / type e.g. Int, Char
		| Tuple [Type]	  -- tuple
		| List Type	  -- list
			 deriving Show

data (Eq a) => G a b = F (a->b) b | H a a {-!derive: test !-}
newtype Q = Q Int {-!derive:test!-}