{-| Copyright : (C) 2019, Myrtle Software Ltd License : BSD2 (see the file LICENSE) Maintainer : QBayLogic B.V. Control module instance, and register, names in generated HDL code. -} {-# LANGUAGE DataKinds #-} {-# LANGUAGE ExplicitForAll #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE TypeOperators #-} module Clash.Magic where import Clash.NamedTypes ((:::)) import GHC.TypeLits (Symbol) -- | Prefix instance and register names with the given 'Symbol' prefixName :: forall (name :: Symbol) a . a -> name ::: a prefixName = id {-# NOINLINE prefixName #-} -- | Suffix instance and register names with the given 'Symbol' suffixName :: forall (name :: Symbol) a . a -> name ::: a suffixName = id {-# NOINLINE suffixName #-} -- | Name the instance or register with the given 'Symbol', instead of using -- an auto-generated name. Pre- and suffixes annotated with 'prefixName' and -- 'suffixName' will be added to both instances and registers named with -- 'setName' and instances and registers that are auto-named. setName :: forall (name :: Symbol) a . a -> name ::: a setName = id {-# NOINLINE setName #-}