hssqlppp-0.0.7: Database/HsSqlPpp/AstInternals/AstUtils.lhs
Copyright 2009 Jake Wheat
This file contains a bunch of small low level utilities to help with
type checking.
> {-# OPTIONS_HADDOCK hide #-}
> module Database.HsSqlPpp.AstInternals.AstUtils
> (
> --checkTypes
> chainTypeCheckFailed
> ,errorToTypeFail
> ,errorToTypeFailF
> ,checkErrorList
> ,getErrors
> ) where
> import Data.List
> import Database.HsSqlPpp.AstInternals.TypeType
================================================================================
= type checking utils
== checkErrors
if we find a typecheckfailed in the list, then propagate that, else
use the final argument.
> chainTypeCheckFailed :: [Type] -> Either a Type -> Either a Type
> chainTypeCheckFailed a b =
> if any (==TypeCheckFailed) a
> then Right TypeCheckFailed
> else b
convert an 'either [typeerror] type' to a type
> errorToTypeFail :: Either [TypeError] Type -> Type
> errorToTypeFail tpe = case tpe of
> Left _ -> TypeCheckFailed
> Right t -> t
convert an 'either [typeerror] x' to a type, using an x->type function
> errorToTypeFailF :: (t -> Type) -> Either [TypeError] t -> Type
> errorToTypeFailF f tpe = case tpe of
> Left _ -> TypeCheckFailed
> Right t -> f t
used to pass a regular type on iff the list of errors is null
> checkErrorList :: [TypeError] -> Type -> Either [TypeError] Type
> checkErrorList es t = if null es
> then Right t
> else Left es
extract errors from an either, gives empty list if right
> getErrors :: Either [TypeError] Type -> [TypeError]
> getErrors = either id (const [])