module Imp.Extra.ModuleName where

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

fromString :: (Exception.MonadThrow m) => String -> m Plugin.ModuleName
fromString :: forall (m :: * -> *). MonadThrow m => String -> m ModuleName
fromString String
x =
  m ModuleName
-> (ModuleName -> m ModuleName) -> Maybe ModuleName -> m ModuleName
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (InvalidModuleName -> m ModuleName
forall e a. (HasCallStack, Exception e) => e -> m a
forall (m :: * -> *) e a.
(MonadThrow m, HasCallStack, Exception e) =>
e -> m a
Exception.throwM (InvalidModuleName -> m ModuleName)
-> InvalidModuleName -> m ModuleName
forall a b. (a -> b) -> a -> b
$ String -> InvalidModuleName
InvalidModuleName.new String
x) ModuleName -> m ModuleName
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe ModuleName -> m ModuleName)
-> Maybe ModuleName -> m ModuleName
forall a b. (a -> b) -> a -> b
$
    ReadP ModuleName -> String -> Maybe ModuleName
forall a. ReadP a -> String -> Maybe a
ReadP.run ReadP ModuleName
Plugin.parseModuleName String
x