{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-| Module : Data.Makefile Copyright : (c) 2016 Nicolas Mattia License : MIT Maintainer : Nicolas Mattia Stability : experimental This module defines the different types used when working with a Makefile. @ # File: Makefile hello = world foo: bar baz @ @ Makefile { entries = [ Assignment "hello " " world" , Rule (Target "foo") [Dependency "bar"] [Command "baz"] ] }) @ -} module Data.Makefile where import Data.String (IsString) import qualified Data.ByteString as B -- | A Makefile object, a list of makefile entries data Makefile = Makefile { entries :: [Entry] } deriving (Show, Eq) -- | A makefile entry, either a rule @(target: dep1 dep1; commands)@ or a -- variable assignment (@hello = world@ or @hello := world@) data Entry = Rule Target [Dependency] [Command] | Assignment B.ByteString B.ByteString deriving (Show, Eq) -- | Makefile target (@foo@ in the example above) newtype Target = Target B.ByteString deriving (Show, Eq, IsString) -- | Target dependency (@bar@ in the example above) newtype Dependency = Dependency B.ByteString deriving (Show, Eq, IsString) -- | Command (@baz@ in the example above) newtype Command = Command B.ByteString deriving (Show, Eq, IsString)