Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data Identifier
- ident :: Iso' Identifier String
- quote :: String -> String
- needsQuoting :: String -> Bool
- parseSimpleIdentifier :: ReadP r Identifier
- parseQuotedIdentifier :: ReadP r Identifier
Documentation
data Identifier Source
Identifiers in Nix are essentially strings. They can be constructed
(and viewed) with the ident
isomorphism. For the sake of convenience,
Identifier
s are an instance of the IsString
class.
Reasonable people restrict themselves to identifiers of the form
[a-zA-Z_][a-zA-Z0-9_'-]*
, because these don't need quoting. The
methods of the Text
class can be used to parse and pretty-print an
identifier with proper quoting:
>>>
disp (ident # "test")
test>>>
disp (ident # "foo.bar")
"foo.bar"
\str -> Just (ident # str) == simpleParse (quote str)
\i -> Just (i :: Identifier) == simpleParse (display i)
ident :: Iso' Identifier String Source
An isomorphism that allows conversion of Identifier
from/to the
standard String
type via review
.
\str -> fromString str == ident # str
\str -> set ident str undefined == ident # str
\str -> view ident (review ident str) == str
quote :: String -> String Source
Helper function to quote a given identifier string if necessary.
>>>
putStrLn (quote "abc")
abc>>>
putStrLn (quote "abc.def")
"abc.def"
needsQuoting :: String -> Bool Source
Checks whether a given string needs quoting when interpreted as an
Identifier
. Simple identifiers that don't need quoting match the
regular expression ^[a-zA-Z_][a-zA-Z0-9_'-]*$
.
parseSimpleIdentifier :: ReadP r Identifier Source
ReadP
parser for simple identifiers, i.e. those that don't need
quoting.
parseQuotedIdentifier :: ReadP r Identifier Source
ReadP
parser for quoted identifiers, i.e. those that do need
quoting.