module HsIdent where
import SrcLoc
data HsIdentI i
= HsVar i
| HsCon i
deriving (Eq, Ord, Show,Read)
-- This is perhaps not a good idea, in case we want to change HsIdentI...
instance Functor HsIdentI where fmap = mapHsIdent
getHSName = accHsIdent id
mapHsIdent nf = mapHsIdent2 nf nf
mapHsIdent2 vf cf = accHsIdent2 (HsVar . vf) (HsCon . cf)
accHsIdent nf = accHsIdent2 nf nf
accHsIdent2 vf cf (HsVar n) = vf n
accHsIdent2 vf cf (HsCon n) = cf n
seqHsIdent (HsVar i) = fmap HsVar i
seqHsIdent (HsCon i) = fmap HsCon i
isHsVar (HsVar _) = True
isHsVar _ = False
isHsCon (HsCon _) = True
isHsCon _ = False
{- -- not used
hsVarName (HsVar v) = Just v
hsVarName _ = Nothing
hsConName (HsCon c) = Just c
hsConName _ = Nothing
-}
---
instance HasSrcLoc i => HasSrcLoc (HsIdentI i) where
srcLoc = srcLoc . getHSName