language-nix-2.2.0: Data types and functions to represent the Nix language

Safe HaskellNone
LanguageHaskell2010

Language.Nix.Identifier

Synopsis

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, Identifiers 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:

>>> pPrint (ident # "test")
test
>>> pPrint (ident # "foo.bar")
"foo.bar"
\str -> Just (ident # str) == parseM "Ident" (quote str)
\i -> Just (i :: Identifier) == parseM "Ident" (prettyShow i)
Instances
Eq Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

Ord Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

Show Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

IsString Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

Generic Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

Associated Types

type Rep Identifier :: Type -> Type #

Arbitrary Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

CoArbitrary Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

Methods

coarbitrary :: Identifier -> Gen b -> Gen b #

NFData Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

Methods

rnf :: Identifier -> () #

HasParser Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

Methods

parser :: CharParser st input m Identifier #

Pretty Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

type Rep Identifier Source # 
Instance details

Defined in Language.Nix.Identifier

type Rep Identifier = D1 (MetaData "Identifier" "Language.Nix.Identifier" "language-nix-2.2.0-4V8HiyuJODaH1hiGHTNPvO" True) (C1 (MetaCons "Identifier" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String)))

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 :: CharParser st tok m Identifier Source #

Parsec parser for simple identifiers, i.e. those that don't need quoting.

parseQuotedIdentifier :: CharParser st tok m Identifier Source #

ReadP parser for quoted identifiers, i.e. those that do need quoting.