packages feed

servant-serf-0.3.1.3: source/library/ServantSerf/Type/ModuleName.hs

module ServantSerf.Type.ModuleName where

import qualified Data.List as List
import qualified Data.Maybe as Maybe
import qualified Distribution.ModuleName as Cabal
import qualified Distribution.Text as Cabal
import qualified System.FilePath as FilePath

newtype ModuleName
  = ModuleName Cabal.ModuleName
  deriving (Eq, Ord, Show)

toString :: ModuleName -> String
toString (ModuleName x) = Cabal.display x

fromString :: String -> Maybe ModuleName
fromString = fmap ModuleName . Cabal.simpleParse

fromFilePath :: FilePath -> Maybe ModuleName
fromFilePath =
  Maybe.listToMaybe
    . Maybe.mapMaybe (fromString . List.intercalate ".")
    . List.tails
    . FilePath.splitDirectories
    . FilePath.dropExtensions