+-- | How is a given signal used in the resulting VHDL?
+data SigUse =
+ SigPortIn -- | Use as an input port
+ | SigPortOut -- | Use as an input port
+ | SigInternal -- | Use as an internal signal
+ | SigStateOld Int -- | Use as the current internal state
+ | SigStateNew Int -- | Use as the new internal state
+ | SigSubState -- | Do not use, state variable is used in a subcircuit
+
+-- | Is this a port signal use?
+isPortSigUse :: SigUse -> Bool
+isPortSigUse SigPortIn = True
+isPortSigUse SigPortOut = True
+isPortSigUse _ = False
+
+-- | Is this a state signal use? Returns false for substate.
+isStateSigUse :: SigUse -> Bool
+isStateSigUse (SigStateOld _) = True
+isStateSigUse (SigStateNew _) = True
+isStateSigUse _ = False
+
+-- | Is this an internal signal use?
+isInternalSigUse :: SigUse -> Bool
+isInternalSigUse SigInternal = True
+isInternalSigUse _ = False
+
+-- | Information on a signal definition
+data SignalInfo = SignalInfo {
+ sigName :: Maybe String,
+ sigUse :: SigUse,
+ sigTy :: Type.Type
+}
+