Paths are non-empty lists of identifiers in Nix.
path # [ident # "yo"]Path [Identifier "yo"]
Any attempt to construct the empty path throws an error:
:set -XScopedTypeVariableseither (\(_::SomeException) -> "empty paths are illegal") show <$> Excpt.try (evaluate (path # []))"empty paths are illegal"
Paths can be pretty-printed and parsed with the Text class:
parse "Path" "foo.\"foo.bar\".bar" :: PathPath [Identifier "foo",Identifier "foo.bar",Identifier "bar"]pPrint (parse "Path" "foo.\"foo\".\"bar\".bar" :: Path)foo.foo.bar.bar
\p -> Just (p :: Path) == parseM "Path" (prettyShow p)Paths are instances of strings and can be implicitly converted:
:set -XOverloadedStringspPrint $ ("yo.bar" :: Path)yo.barpPrint $ (" yo . bar" :: Path)yo.bar
Freaky quoted identifiers are fine throughout:
pPrint $ path # ["yo","b\"ar"]yo."b\"ar"pPrint ("\"5ident\"" :: Path)"5ident"pPrint $ path # ["5ident","foo.bar","foo\nbar"]"5ident"."foo.bar"."foo\nbar"
Instances11Eq, Ord, Show, IsString, Generic, NFData, …
Eq PathDefined in language-nix-2.2.0 · Language.Nix.PathOrd PathDefined in language-nix-2.2.0 · Language.Nix.PathShow PathDefined in language-nix-2.2.0 · Language.Nix.PathIsString PathDefined in language-nix-2.2.0 · Language.Nix.PathGeneric PathDefined in language-nix-2.2.0 · Language.Nix.PathNFData PathDefined in language-nix-2.2.0 · Language.Nix.PathPretty PathDefined in language-nix-2.2.0 · Language.Nix.PathArbitrary PathDefined in language-nix-2.2.0 · Language.Nix.PathCoArbitrary PathDefined in language-nix-2.2.0 · Language.Nix.PathHasParser PathDefined in language-nix-2.2.0 · Language.Nix.Pathtype Rep Path = D1 ('MetaDataDefined in language-nix-2.2.0 · Language.Nix.Path"Path"
"Language.Nix.Path"
"language-nix-2.2.0-AhPVkRzVEzuCsQFG2Mwzzq"
'True) (C1 ('MetaCons"Path"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Identifier])))