packages feed

lhc-0.6.20081210: src/Name/VConsts.hs

module Name.VConsts where

import Data.Traversable
import Data.Foldable
import Control.Applicative
import Data.DeriveTH
import Data.Derive.All

-- This is much more verbose/complicated than it needs be.

class TypeNames a where
    tInt :: a
    tRational :: a
    tChar :: a
    tIntzh :: a
    tEnumzh :: a
    tIntegerzh :: a
    tCharzh :: a
    tStar :: a
    tHash :: a
    tBool :: a
    tUnit :: a
    tString :: a
    tInteger :: a
    tWorld__ :: a

    tInt = error "tInt"
    tRational = error "tRational"
    tChar = error "tChar"
    tIntzh = error "tIntzh"
    tEnumzh = error "tEnumzh"
    tIntegerzh = error "tIntegerzh"
    tCharzh = error "tCharzh"
    tStar = error "VConsts: tStar"
    tBool = error "tBool"
    tUnit = error "tUnit"
    tString = error "tString"
    tInteger = error "tInteger"
    tHash = error "tHash"
    tWorld__ = error "tWorld"


class ConNames a where
    vTrue :: a
    vFalse :: a
    vEmptyList :: a
    vCons :: a
    vUnit :: a
    vOrdering :: Ordering -> a

    vTrue = error "vTrue"
    vFalse = error "vFalse"
    vEmptyList = error "vEmptyList"
    vCons = error "vCons"
    vUnit = error "vUnit"
    vOrdering x = error $ "v" ++ show x

class FromTupname a where
    fromTupname :: Monad m => a -> m Int

instance FromTupname String where
    fromTupname ('(':s) | (cs,")") <- span (== ',') s, lc <- length cs, lc > 0 = return $! (lc + 1)
    fromTupname xs = fail $ "fromTupname: not tuple " ++ xs

instance FromTupname (String,String) where
    fromTupname ("Lhc.Basics",n) = fromTupname n
    fromTupname xs =  fail $ "fromTupname: not tuple " ++ show xs


class ToTuple a where
    toTuple :: Int -> a

instance ToTuple String where
    toTuple n = '(': replicate (n - 1) ',' ++ ")"

instance ToTuple (String,String) where
    toTuple n = ("Lhc.Basics",toTuple n)




-- | various functions needed for desugaring.
data FuncNames a = FuncNames {
    func_bind :: a,
    func_bind_ :: a,
    func_return :: a,
    func_concatMap :: a,
    func_equals :: a,
    func_fromInt :: a,
    func_fromInteger :: a,
    func_fromRational :: a,
    func_negate :: a,
    func_runExpr :: a,
    func_runRaw :: a,
    func_runMain :: a,
    func_leq :: a,
    func_geq :: a,
    func_lt :: a,
    func_gt :: a,
    func_compare :: a,
    func_neq :: a,
    func_fromEnum :: a,
    func_toEnum :: a,
    func_minBound :: a,
    func_maxBound :: a,
    func_enumFrom :: a,
    func_enumFromThen :: a,
    func_range :: a,
    func_index :: a,
    func_inRange :: a,
    func_runNoWrapper :: a
    }
$(derive makeFunctor ''FuncNames)
$(derive makeFoldable ''FuncNames)
$(derive makeTraversable ''FuncNames)