/dhall-path/Directory/Relative/ascend

Copy path to clipboard

Moves up one level in the directory tree.

Examples

  ascend { directories = [ "two", "one" ], file = {=}, parents = 0 }
≡ { directories = [ "one" ], file = {=}, parents = 0 }
ascend { directories = [ "one" ], file = {=}, parents = 0 } ≡ ../current
  ascend { directories = [] : List Text, file = {=}, parents = 0 }
≡ { directories = [] : List Text, file = {=}, parents = 1 }
  ascend { directories = [] : List Text, file = {=}, parents = 2 }
≡ { directories = [] : List Text, file = {=}, parents = 3 }

Source

{-|
Moves up one level in the directory tree.
-}
let P =
https://prelude.dhall-lang.org/v20.1.0/package.dhall sha256:26b0ef498663d269e4dc6a82b0ee289ec565d683ef4c00d0ebdd25333a5a3c98

let ascend =
λ(directory : ./Type) →
if P.List.null Text directory.directories
then directory ⫽ { parents = directory.parents + 1 }
else directory
⫽ { directories = P.List.drop 1 Text directory.directories }

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

let canArriveAtCurrentDirectory =
assert
: ascend { directories = [ "one" ], file = {=}, parents = 0 } ≡ ../current

let canIntroduceReparenting =
assert
: ascend { directories = [] : List Text, file = {=}, parents = 0 }
≡ { directories = [] : List Text, file = {=}, parents = 1 }

let canExtendReparenting =
assert
: ascend { directories = [] : List Text, file = {=}, parents = 2 }
≡ { directories = [] : List Text, file = {=}, parents = 3 }

in ascend