mirror of
https://github.com/unisonweb/unison.git
synced 2024-09-19 06:17:33 +03:00
36 lines
591 B
Markdown
36 lines
591 B
Markdown
```unison
|
|
structural ability Exit a where
|
|
exit : a -> b
|
|
|
|
prod : [Nat] -> Nat
|
|
prod l =
|
|
loop acc = cases
|
|
[] -> acc
|
|
0 +: _ -> exit 0
|
|
n +: ns -> loop (acc * n) ns
|
|
|
|
handle loop 0 l with cases
|
|
{ exit v -> _ } -> v
|
|
{ p } -> p
|
|
|
|
l1 = [1,3,5,7,9]
|
|
l2 = [1,2,0,3,4,5,6,7,8]
|
|
l3 = [1,2,4,8,16,3,5,6]
|
|
|
|
products = cases (x, y, z) ->
|
|
px = prod x
|
|
py = prod y
|
|
pz = prod z
|
|
|
|
"(" ++ toText px ++ ", " ++ toText py ++ ", \"" ++ toText pz ++ "\")"
|
|
|
|
mkTestCase = do
|
|
saveTestCase "case-02" "v4" products (l1, l2, l3)
|
|
|
|
```
|
|
|
|
```ucm
|
|
scratch/main> add
|
|
scratch/main> run mkTestCase
|
|
```
|