hpack-0.34.3: src/Hpack/Haskell.hs
module Hpack.Haskell (
isModule
, isModuleNameComponent
, isQualifiedIdentifier
, isIdentifier
) where
import Data.Char
isModule :: [String] -> Bool
isModule name = (not . null) name && all isModuleNameComponent name
isModuleNameComponent :: String -> Bool
isModuleNameComponent name = case name of
x : xs -> isUpper x && all isIdChar xs
_ -> False
isQualifiedIdentifier :: [String] -> Bool
isQualifiedIdentifier name = case reverse name of
x : xs -> isIdentifier x && isModule xs
_ -> False
isIdentifier :: String -> Bool
isIdentifier name = case name of
x : xs -> isLower x && all isIdChar xs && name `notElem` reserved
_ -> False
reserved :: [String]
reserved = [
"case"
, "class"
, "data"
, "default"
, "deriving"
, "do"
, "else"
, "foreign"
, "if"
, "import"
, "in"
, "infix"
, "infixl"
, "infixr"
, "instance"
, "let"
, "module"
, "newtype"
, "of"
, "then"
, "type"
, "where"
, "_"
]
isIdChar :: Char -> Bool
isIdChar c = isAlphaNum c || c == '_' || c == '\''