{-# LANGUAGE TemplateHaskell #-} {-# OPTIONS_HADDOCK hide #-} -- | -- Module : Data.Array.Accelerate.Sugar.Foreign -- Copyright : [2008..2020] The Accelerate Team -- License : BSD3 -- -- Maintainer : Trevor L. McDonell <trevor.mcdonell@gmail.com> -- Stability : experimental -- Portability : non-portable (GHC extensions) -- module Data.Array.Accelerate.Sugar.Foreign where import Data.Array.Accelerate.Error import Data.Typeable import Language.Haskell.TH -- Class for backends to choose their own representation of foreign functions. -- By default it has no instances. If a backend wishes to have an FFI it must -- provide an instance. -- class Typeable asm => Foreign asm where -- Backends should be able to produce a string representation of the foreign -- function for pretty printing, typically the name of the function. strForeign :: asm args -> String strForeign _ = "<foreign>" -- Backends which want to support compile-time embedding must be able to lift -- the foreign function into Template Haskell liftForeign :: HasCallStack => asm args -> Q (TExp (asm args)) liftForeign _ = internalError "not supported by this backend"