packages feed

imp-1.0.1.0: source/library/Imp/Type/Source.hs

module Imp.Type.Source where

import qualified Control.Monad.Catch as Exception
import qualified GHC.Plugins as Plugin
import qualified Imp.Extra.ModuleName as ModuleName

data Source
  = Implicit
  | Explicit Plugin.ModuleName
  deriving (Eq, Show)

fromModuleName :: Plugin.ModuleName -> Source
fromModuleName = Explicit

fromString :: (Exception.MonadThrow m) => String -> m Source
fromString s =
  if s == "_"
    then pure Implicit
    else fromModuleName <$> ModuleName.fromString s

isImplicit :: Source -> Bool
isImplicit s = case s of
  Implicit -> True
  Explicit _ -> False