{-# LANGUAGE TemplateHaskell #-} -- | This file should not be imported directly. Import "Test.OITestGenerator" -- instead. module Test.OITestGenerator.OpArg ( OpArg(), opArg, opArg_name, opArg_argi, opArg_gens, opArg_has_constraint, opArg_constraint, op2opArgs ) where import Data.Label import Data.Maybe import Language.Haskell.TH import Prelude import Test.OITestGenerator.Op data OpArg = OpArg { _name :: Name, _argi :: Int, _gens :: [Name], _constraint :: Maybe Name } mkLabel ''OpArg opArg :: Name -> Int -> [Name] -> Maybe Name -> OpArg opArg name' argi' gens' constraint' = OpArg { _name = name', _argi = argi', _gens = gens', _constraint = constraint' } op2opArg :: Op -> Int -> Q OpArg op2opArg opn argi' = do gens' <- op_gens opn return $ opArg (op_name opn) argi' gens' (op_maybe_constraint opn) op2opArgs :: Op -> Q [OpArg] op2opArgs opn = op_args opn >>= mapM (op2opArg opn) opArg_name :: OpArg -> Name opArg_name = get name opArg_argi :: OpArg -> Int opArg_argi = get argi opArg_gens :: OpArg -> [Name] opArg_gens = get gens opArg_has_constraint :: OpArg -> Bool opArg_has_constraint = isJust . get constraint opArg_constraint :: OpArg -> Name opArg_constraint = fromJust . get constraint