source-constraints-0.0.1: src/SourceConstraints/LocalModule.hs
module SourceConstraints.LocalModule
( LocalModule(..)
, isLocalModule
, localModuleParser
)
where
import Control.Applicative
import Data.Attoparsec.Text
import Data.Bool
import Data.Char
import Data.Eq
import Data.Function
import Data.Semigroup
import Data.List
import Module
newtype LocalModule = LocalModule ModuleName
localModuleParser :: Parser LocalModule
localModuleParser = LocalModule <$> (string "local:" *> moduleNameParser)
moduleNameParser :: Parser ModuleName
moduleNameParser = do
first <- section
others <- many (char '.' *> section)
pure . mkModuleName $ first <> intercalate "." others
where
section = (:) <$> satisfy isUpper <*> many (satisfy isLower)
isLocalModule :: LocalModule -> ModuleName -> Bool
isLocalModule (LocalModule localModuleName) moduleName =
localModuleName == moduleName || prefixMatch
where
prefixMatch =
(moduleNameString localModuleName <> ".")
`isPrefixOf`
moduleNameString moduleName