{-# LANGUAGE GADTs #-}

module GhcTags.CTag.Utils
  ( tagKindToChar
  , charToTagKind
  ) where

import           GhcTags.Tag

tagKindToChar :: TagKind -> Maybe Char
tagKindToChar :: TagKind -> Maybe Char
tagKindToChar TagKind
tk = case TagKind
tk of
    TagKind
TkModule                  -> forall a. a -> Maybe a
Just Char
'M'
    TagKind
TkTerm                    -> forall a. a -> Maybe a
Just Char
'`'
    TagKind
TkFunction                -> forall a. a -> Maybe a
Just Char
'λ'
    TagKind
TkTypeConstructor         -> forall a. a -> Maybe a
Just Char
'Λ'
    TagKind
TkDataConstructor         -> forall a. a -> Maybe a
Just Char
'c'
    TagKind
TkGADTConstructor         -> forall a. a -> Maybe a
Just Char
'g'
    TagKind
TkRecordField             -> forall a. a -> Maybe a
Just Char
'r'
    TagKind
TkTypeSynonym             -> forall a. a -> Maybe a
Just Char
'≡'
    TagKind
TkTypeSignature           -> forall a. a -> Maybe a
Just Char
'⊢'
    TagKind
TkPatternSynonym          -> forall a. a -> Maybe a
Just Char
'p'
    TagKind
TkTypeClass               -> forall a. a -> Maybe a
Just Char
'C'
    TagKind
TkTypeClassMember         -> forall a. a -> Maybe a
Just Char
'm'
    TagKind
TkTypeClassInstance       -> forall a. a -> Maybe a
Just Char
'i'
    TagKind
TkTypeClassInstanceMember -> forall a. a -> Maybe a
Just Char
'x'
    TagKind
TkTypeFamily              -> forall a. a -> Maybe a
Just Char
'f'
    TagKind
TkTypeFamilyInstance      -> forall a. a -> Maybe a
Just Char
'F'
    TagKind
TkDataTypeFamily          -> forall a. a -> Maybe a
Just Char
'd'
    TagKind
TkDataTypeFamilyInstance  -> forall a. a -> Maybe a
Just Char
'D'
    TagKind
TkForeignImport           -> forall a. a -> Maybe a
Just Char
'I'
    TagKind
TkForeignExport           -> forall a. a -> Maybe a
Just Char
'E'

    CharKind Char
c                -> forall a. a -> Maybe a
Just Char
c
    TagKind
NoKind                    -> forall a. Maybe a
Nothing


charToTagKind :: Char -> TagKind
charToTagKind :: Char -> TagKind
charToTagKind Char
c = case Char
c of
     Char
'M' -> TagKind
TkModule
     Char
'`' -> TagKind
TkTerm
     Char
'λ' -> TagKind
TkFunction
     Char
'Λ' -> TagKind
TkTypeConstructor
     Char
'c' -> TagKind
TkDataConstructor
     Char
'g' -> TagKind
TkGADTConstructor
     Char
'r' -> TagKind
TkRecordField
     Char
'≡' -> TagKind
TkTypeSynonym
     Char
'⊢' -> TagKind
TkTypeSignature
     Char
'p' -> TagKind
TkPatternSynonym
     Char
'C' -> TagKind
TkTypeClass
     Char
'm' -> TagKind
TkTypeClassMember
     Char
'i' -> TagKind
TkTypeClassInstance
     Char
'x' -> TagKind
TkTypeClassInstanceMember
     Char
'f' -> TagKind
TkTypeFamily
     Char
'F' -> TagKind
TkTypeFamilyInstance
     Char
'd' -> TagKind
TkDataTypeFamily
     Char
'D' -> TagKind
TkDataTypeFamilyInstance
     Char
'I' -> TagKind
TkForeignImport
     Char
'E' -> TagKind
TkForeignExport

     Char
_   -> Char -> TagKind
CharKind Char
c