{-# LANGUAGE TypeFamilies, FlexibleContexts, Rank2Types #-}

module Feldspar.Transformation
    ( module Feldspar.Transformation
    , module Feldspar.Transformation.Framework
    , module Feldspar.Compiler.Imperative.TransformationInstance
    , module Feldspar.Compiler.Imperative.Representation
    ) where

import Feldspar.Transformation.Framework
import Feldspar.Compiler.Imperative.TransformationInstance
import Feldspar.Compiler.Imperative.Representation

-- ================================================================================================
--  == Plugin class
-- ================================================================================================


class (Transformable t Module) => Plugin t where
    type ExternalInfo t
    executePlugin :: t -> ExternalInfo t -> Module (From t) -> Module (To t)