mirror of
https://github.com/unisonweb/unison.git
synced 2024-11-10 20:00:27 +03:00
36 lines
894 B
Plaintext
36 lines
894 B
Plaintext
structural ability Emit a where
|
|
emit : a ->{Emit a} ()
|
|
|
|
structural type Stream a = Stream ('{Emit a} ())
|
|
|
|
use Stream Stream
|
|
use Optional None Some
|
|
|
|
namespace Stream where
|
|
|
|
unfold : s -> (s -> Optional (a, s)) -> Stream a
|
|
unfold s f = Stream 'let
|
|
-- step : (s -> Optional (a,s)) -> s ->{Emit a} ()
|
|
step f s = match f s with
|
|
None -> ()
|
|
Some (a, s) -> emit a
|
|
step f s
|
|
step f s
|
|
|
|
---
|
|
|
|
I found a value of type a where I expected to find one of type a:
|
|
|
|
11 | unfold : s -> (s -> Optional (a, s)) -> Stream a
|
|
12 | unfold s f = Stream 'let
|
|
13 | -- step : (s -> Optional (a,s)) -> s ->{Emit a} ()
|
|
14 | step f s = match f s with
|
|
15 | None -> ()
|
|
16 | Some (a, s) -> emit a
|
|
17 | step f s
|
|
18 | step f s
|
|
|
|
from right here:
|
|
|
|
4 | type Stream a = Stream ('{Emit a} ())
|