51 lines
1.3 KiB
Plaintext
51 lines
1.3 KiB
Plaintext
|
let List/map =
|
||
|
https://prelude.dhall-lang.org/v21.1.0/List/map
|
||
|
sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
|
||
|
|
||
|
let AccountTree
|
||
|
: Type
|
||
|
= forall (a : Type) ->
|
||
|
forall ( Fix
|
||
|
: < AccountF : { _1 : Text, _2 : Text }
|
||
|
| PlaceholderF : { _1 : Text, _2 : Text, _3 : List a }
|
||
|
> ->
|
||
|
a
|
||
|
) ->
|
||
|
a
|
||
|
|
||
|
let AccountTreeF =
|
||
|
\(a : Type) ->
|
||
|
< AccountF : { _1 : Text, _2 : Text }
|
||
|
| PlaceholderF : { _1 : Text, _2 : Text, _3 : List a }
|
||
|
>
|
||
|
|
||
|
let Account
|
||
|
: Text -> Text -> AccountTree
|
||
|
= \(desc : Text) ->
|
||
|
\(name : Text) ->
|
||
|
\(a : Type) ->
|
||
|
let f = AccountTreeF a
|
||
|
|
||
|
in \(Fix : f -> a) -> Fix (f.AccountF { _1 = desc, _2 = name })
|
||
|
|
||
|
let Placeholder
|
||
|
: Text -> Text -> List AccountTree -> AccountTree
|
||
|
= \(desc : Text) ->
|
||
|
\(name : Text) ->
|
||
|
\(children : List AccountTree) ->
|
||
|
\(a : Type) ->
|
||
|
let f = AccountTreeF a
|
||
|
|
||
|
in \(Fix : f -> a) ->
|
||
|
let apply = \(x : AccountTree) -> x a Fix
|
||
|
|
||
|
in Fix
|
||
|
( f.PlaceholderF
|
||
|
{ _1 = desc
|
||
|
, _2 = name
|
||
|
, _3 = List/map AccountTree a apply children
|
||
|
}
|
||
|
)
|
||
|
|
||
|
in { Account, Placeholder }
|