{-# LANGUAGE TemplateHaskell #-} {- | Module : Lighttpd.Conf.Instances.Lift Copyright : (c) Matt Morrow 2008 License : BSD3 Maintainer : Matt Morrow Stability : unstable Portability : non-portable (DeriveDataTypeable) -} module Lighttpd.Conf.Instances.Lift where import Lighttpd.Conf.Syntax hiding (Name,mkName) import qualified Lighttpd.Conf.Syntax as Syn import qualified Data.ByteString.Char8 as BC8 import Language.Haskell.TH.Syntax hiding (Pat,Exp,Match,CondE) import Language.Haskell.TH.Lib import Data.PackedString instance Lift BC8.ByteString where lift a = [|BC8.pack $(lift (BC8.unpack a))|] instance Lift Syn.Name where lift (Syn.Name a) = [|Syn.Name a|] instance Lift QName where lift (QName a b) = [|QName a b|] instance Lift Config where lift (Config es) = [|Config es|] instance Lift Val where -- produce an expression w/ will capture the -- haskell var of the same name as that which -- the bytestring in the SpliceV refers -- to (i mean "refers to" in the obvious way). -- This variable must be of type (ToVal a) => a lift (SpliceV x) = [|toVal $(varE (mkName (BC8.unpack x)))|] lift (VarV x0) = appE (conE (Name (packString "VarV") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (StringV x0) = appE (conE (Name (packString "StringV") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (IntegerV x0) = appE (conE (Name (packString "IntegerV") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (BooleanV x0) = appE (conE (Name (packString "BooleanV") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (ArrayV x0) = appE (conE (Name (packString "ArrayV") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (ManyV x0) = appE (conE (Name (packString "ManyV") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) instance Lift ArrayElem where lift (ArrayElem x0 x1) = appE (appE (conE (Name (packString "ArrayElem") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0)) (lift x1) instance Lift Enabled where lift (Enable) = conE (Name (packString "Enable") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax"))) lift (Disable) = conE (Name (packString "Disable") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax"))) instance Lift Exp where lift (CommentE x0) = appE (conE (Name (packString "CommentE") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (GlobalCxtE x0) = appE (conE (Name (packString "GlobalCxtE") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (OptionE x0 x1) = appE (appE (conE (Name (packString "OptionE") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0)) (lift x1) lift (MergeE x0 x1) = appE (appE (conE (Name (packString "MergeE") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0)) (lift x1) lift (IncludeE x0) = appE (conE (Name (packString "IncludeE") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (CondE x0 x1 x2) = appE (appE (appE (conE (Name (packString "CondE") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0)) (lift x1)) (lift x2) instance Lift CondElse where lift (CondElse x0 x1) = appE (appE (conE (Name (packString "CondElse") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0)) (lift x1) instance Lift Include where lift (ValueI x0) = appE (conE (Name (packString "ValueI") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (ShellI x0) = appE (conE (Name (packString "ShellI") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) instance Lift Cond where lift (Cond x0 x1 x2) = appE (appE (appE (conE (Name (packString "Cond") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0)) (lift x1)) (lift x2) instance Lift Op where lift (Equal) = conE (Name (packString "Equal") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax"))) lift (NotEqual) = conE (Name (packString "NotEqual") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax"))) lift (Match) = conE (Name (packString "Match") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax"))) lift (NotMatch) = conE (Name (packString "NotMatch") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax"))) instance Lift Pat where lift (StringP x0) = appE (conE (Name (packString "StringP") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) lift (RegexP x0) = appE (conE (Name (packString "RegexP") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0) instance Lift Field where lift (Field x0 x1) = appE (appE (conE (Name (packString "Field") (NameG DataName (packString "lighttpd-conf-0.3") (packString "Lighttpd.Conf.Syntax")))) (lift x0)) (lift x1)