/dhall-path/Directory/Absolute/ascend

Copy path to clipboard

Moves up one level in the directory tree, returning None if we’re already at the root.

Examples

  ascend { directories = [ "two", "one" ], file = {=}, parents = {=} }
≡ Some { directories = [ "one" ], file = {=}, parents = {=} }
ascend { directories = [ "one" ], file = {=}, parents = {=} } ≡ Some ../root
  ascend { directories = [] : List Text, file = {=}, parents = {=} }
≡ None AbsoluteDirectory

Source

{-|
Moves up one level in the directory tree, returning `None` if we’re already at
the root.
-}
let P =
https://prelude.dhall-lang.org/v20.1.0/package.dhall sha256:26b0ef498663d269e4dc6a82b0ee289ec565d683ef4c00d0ebdd25333a5a3c98

let AbsoluteDirectory = ./Type

let ascend =
λ(directory : AbsoluteDirectory) →
if ./isRoot directory
then None AbsoluteDirectory
else Some
( directory
⫽ { directories = P.List.drop 1 Text directory.directories }
)

let movesUpOneLevel =
assert
: ascend { directories = [ "two", "one" ], file = {=}, parents = {=} }
≡ Some { directories = [ "one" ], file = {=}, parents = {=} }

let arrivesAtRoot =
assert
: ascend { directories = [ "one" ], file = {=}, parents = {=} }
≡ Some ../root

let canNotCauseReparenting =
assert
: ascend { directories = [] : List Text, file = {=}, parents = {=} }
≡ None AbsoluteDirectory

in ascend