/dhall-path/Directory/Relative/concat

Copy path to clipboard

Source

let RelativeDirectory = ./Type

let RelativePath = ../../Path/Relative/Type

let Typ = ../../Path/Typ

in λ(parent : RelativeDirectory) →
λ(type : Typ) →
λ(child : RelativePath type) →
let remaining =
List/fold
Text
parent.directories
{ directories : List Text, parents : Natural }
( λ(directory : Text) →
λ(remaining : { directories : List Text, parents : Natural }) →
if Natural/isZero remaining.parents
then { directories = [ directory ] # remaining.directories
, parents = remaining.parents
}
else { directories = remaining.directories
, parents = Natural/subtract 1 remaining.parents
}
)
{ directories = [] : List Text, parents = child.parents }

in { parents = remaining.parents + parent.parents
, directories = remaining.directories # child.directories
, file = child.file
}
: RelativePath type