futhask-0.2.0: src/Headers.hs
module Headers where
import Data.List (intercalate)
import Backends
data Import = N String | Q String String
globalImport (N m) = "import " ++ m ++ "\n"
globalImport (Q m a) = "import qualified " ++ m ++ " as " ++ a ++ "\n"
localImport moduleName (N sub) = globalImport $ N (moduleName ++ "." ++ sub)
localImport moduleName (Q sub a) = globalImport $ Q (moduleName ++ "." ++ sub) a
haskellHeader exports extensions localImports globalImports moduleName subModuleName
= (if length extensions > 0
then "{-# LANGUAGE " ++ intercalate ", " extensions ++ " #-}"
else "")
++ "\nmodule "
++ moduleName ++ (case subModuleName of Nothing -> ""; Just n -> '.':n)
++ (if length exports > 0 then " (" ++ intercalate ", " exports ++ ")" else "")
++ " where\n"
++ concatMap (localImport moduleName) localImports
++ concatMap globalImport globalImports
specific C = []
specific Multicore = []
specific OpenCL = [N "Control.Parallel.OpenCL (CLMem, CLCommandQueue)"]
specific Cuda = [N "Foreign.CUDA.Ptr(DevicePtr(..))"]
rawHeader backend = haskellHeader
[]
[ "ForeignFunctionInterface" ]
[]
( [ N "Data.Int (Int8, Int16, Int32, Int64)"
, N "Data.Word (Word8, Word16, Word32, Word64)"
, N "Foreign.C.Types (CBool(..), CSize(..), CChar(..), CUChar(..), CFile(..))"
, N "Foreign.Ptr (Ptr)" ] ++ specific backend )
typeClassesHeader backend = haskellHeader
[ "FutharkObject", "FutharkArray"
, "freeFO", "fromFO", "withFO", "wrapFO", "finalizeFO"
, "newFA", "shapeFA", "valuesFA"
, "Input", "Output"
, "fromFuthark", "toFuthark" ]
[ "MultiParamTypeClasses", "FunctionalDependencies", "TypeSynonymInstances" ]
[ Q "Raw" "Raw", N "Fut" ]
[ N "Foreign", Q "Data.Massiv.Array" "M"
, N "Control.Monad.Trans", N "Control.Monad.IO.Class", N "Control.Concurrent" ]
configHeader backend = haskellHeader
[]
[]
[ Q "Raw" "Raw" ]
( [ N "Foreign.C" ] ++ specific backend )
contextHeader backend = haskellHeader
[]
[]
[Q "Raw" "Raw", N "Config" ]
[N "Foreign as F", Q "Foreign.Concurrent" "FC", N "Foreign.C", N "Control.Concurrent", N "System.Mem (performGC)"]
futHeader backend = haskellHeader
[ "FutT", "Fut", "FutIO"
, "runFutIn", "runFutWith", "runFut", "runFutTIn", "runFutTWith", "runFutT"
, "mapFutT", "map2FutT", "pureFut", "unsafeFromFutIO", "unsafeLiftFromIO" ]
[ "RankNTypes", "ExistentialQuantification", "FlexibleInstances", "UndecidableInstances", "TypeFamilies", "MultiParamTypeClasses" ]
[ N "Context", N "Config" ]
[ N "System.IO.Unsafe", N "Control.Monad.Base", N "Control.Monad.Trans", N "Control.Monad.Trans.Control", N "Control.Monad.Identity" ]
wrapHeader backend = haskellHeader
[]
[ "RankNTypes"
, "FlexibleInstances"
, "FlexibleContexts"
, "MultiParamTypeClasses"
, "UndecidableInstances" ]
[ Q "Raw" "Raw", N "Context", N "Fut", N "TypeClasses" ]
[ N "Foreign as F", Q "Foreign.Concurrent" "FC", N "Foreign.C"
, Q "Data.Massiv.Array" "M", Q "Data.Massiv.Array.Unsafe" "MU", N "Control.Concurrent" ]
typesHeader backend = haskellHeader
[]
[ "RankNTypes", "ExistentialQuantification"
, "MultiParamTypeClasses", "TypeSynonymInstances", "FlexibleInstances" ]
[ Q "Raw" "Raw", N "Wrap", N "TypeClasses" ]
[ Q "Foreign" "F", Q "Data.Massiv.Array" "M"
, Q "Control.Concurrent.MVar" "MV"
, N "Data.Int (Int8, Int16, Int32, Int64)"
, N "Data.Word (Word8, Word16, Word32, Word64)"
, N "Foreign.C.Types (CBool(..), CSize(..), CChar(..), CUChar(..), CFile(..))"
, N "Foreign.Ptr (Ptr)"
, N "Control.DeepSeq (rwhnf)" ]
entriesHeader backend = haskellHeader
[]
[]
[ Q "Raw" "Raw", Q "Context" "C", N "Fut (FutT)", Q "Fut" "Fut"
, Q "Wrap" "U", N "Types", Q "TypeClasses" "T" ]
[ N "Data.Int (Int8, Int16, Int32, Int64)"
, N "Data.Word (Word8, Word16, Word32, Word64)"
, Q "Foreign" "F", N "Foreign.C.Types" ]
utilsHeader backend = haskellHeader
[]
[ "RankNTypes"
, "FlexibleContexts"
, "FlexibleInstances"
, "MultiParamTypeClasses"
, "UndecidableInstances" ]
[ Q "Raw" "Raw", N "Context", N "Fut", N "TypeClasses", N "Wrap" ]
[ N "Foreign as F", Q "Foreign.Concurrent" "FC", N "Foreign.C"
, Q "Data.Massiv.Array" "M", Q "Data.Massiv.Array.Unsafe" "MU" ]
exportsHeader backend = haskellHeader
[ "module F" ]
[]
[ N "Context as F"
, N "Config as F hiding (setOption)"
, N "TypeClasses as F hiding (FutharkObject, FutharkArray)"
, N "Utils as F"
, N "Fut as F" ]
[]