{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Language.CMake.AST where import qualified Data.ByteString.Char8 as BS import Data.String newtype File = File { fileElements :: [FileElement] } deriving (Eq, Show) data FileElement = CommandElement { commandInvocation :: CommandInvocation } | NonCommandElement deriving (Eq, Show) data CommandInvocation = CommandInvocation { commandId :: BS.ByteString , commandArgs :: [Argument] } deriving (Eq, Show) data LiteralElem = LiteralString { literalString :: BS.ByteString } | VariableReference { variableName :: BS.ByteString } deriving (Eq, Show) newtype Literal = Literal { literalParts :: [LiteralElem] } deriving (Eq, Show, Semigroup, Monoid) instance IsString Literal where fromString = Literal . pure . LiteralString . BS.pack newtype Argument = Argument { argumentLiteral :: Literal } deriving (Eq, Show, Semigroup, Monoid) instance IsString Argument where fromString = Argument . fromString