module Language.Haskell.TH.Compat.Reify.Current (
  ParentName,
  unClassOpI, unDataConI, unVarI,
  reifyFixity,
  )where

import Language.Haskell.TH (Info (..), Name, Type, ParentName, Dec, reifyFixity)


-- | Compatible interface to destruct 'ClassOpI'
unClassOpI :: Info -> Maybe (Name, Type, ParentName)
unClassOpI :: Info -> Maybe (Name, Type, Name)
unClassOpI (ClassOpI n :: Name
n t :: Type
t p :: Name
p) = (Name, Type, Name) -> Maybe (Name, Type, Name)
forall a. a -> Maybe a
Just (Name
n, Type
t, Name
p)
unClassOpI  _               = Maybe (Name, Type, Name)
forall a. Maybe a
Nothing

-- | Compatible interface to destruct 'DataConI'
unDataConI :: Info -> Maybe (Name, Type, ParentName)
unDataConI :: Info -> Maybe (Name, Type, Name)
unDataConI (DataConI n :: Name
n t :: Type
t p :: Name
p) = (Name, Type, Name) -> Maybe (Name, Type, Name)
forall a. a -> Maybe a
Just (Name
n, Type
t, Name
p)
unDataConI  _               = Maybe (Name, Type, Name)
forall a. Maybe a
Nothing

-- | Compatible interface to destruct 'VarI'
unVarI :: Info -> Maybe (Name, Type, Maybe Dec)
unVarI :: Info -> Maybe (Name, Type, Maybe Dec)
unVarI (VarI n :: Name
n t :: Type
t md :: Maybe Dec
md) = (Name, Type, Maybe Dec) -> Maybe (Name, Type, Maybe Dec)
forall a. a -> Maybe a
Just (Name
n, Type
t, Maybe Dec
md)
unVarI  _            = Maybe (Name, Type, Maybe Dec)
forall a. Maybe a
Nothing