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.
It is usually wise to only use identifiers of the form
[a-zA-Z_][a-zA-Z0-9_'-]*, because these don't need quoting.
Consequently, they can appear almost anywhere in a Nix expression
(whereas quoted identifiers e.g. can't be used in function patterns).
The methods of the Pretty class can be used to print an identifier
with proper quoting:
pPrint (ident # "test")testpPrint (ident # "foo.bar")"foo.bar"
The HasParser class allows parsing rendered identifiers even if they are quoted:
parseM "Identifier" "hello" :: Maybe IdentifierJust (Identifier "hello")parseM "Identifier" "\"3rd party\"" :: Maybe IdentifierJust (Identifier "3rd party")
Warning: Identifiers may not contain '\0', but this is not
checked during construction!
See also https://nix.dev/manual/nix/2.30/language/identifiers.html.
Instances11Eq, Ord, Show, IsString, Generic, NFData, …
Eq IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierOrd IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierShow IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierIsString IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierGeneric IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierNFData IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierPretty IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierArbitrary IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierCoArbitrary IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierHasParser IdentifierDefined in language-nix-2.3.0 · Language.Nix.IdentifierNote that this parser is more lenient than Nix w.r.t. simple identifiers, since it will accept nixKeywords.
Naturally, it does not support string interpolation, but does not reject strings that contain them. E.g. the string literal
"hello ${world}"will contain${world}verbatim after parsing. Do not rely on this behavior, as it may be changed in the future.type Rep Identifier = D1 ('MetaDataDefined in language-nix-2.3.0 · Language.Nix.Identifier"Identifier"
"Language.Nix.Identifier"
"language-nix-2.3.0-1c3LFJpyNAq8gy6v1QoxGi"
'True) (C1 ('MetaCons"Identifier"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))