improve benchmark error handling, bugfixes

This commit is contained in:
Anton-4 2023-04-18 15:19:58 +02:00
parent 65ebeab303
commit 8861c9394a
No known key found for this signature in database
GPG key ID: 0971D718C0A9B937
7 changed files with 86 additions and 45 deletions

View file

@ -1,5 +1,5 @@
interface Task
exposes [Task, succeed, fail, after, map, putLine, putInt, getInt, forever, loop]
exposes [Task, succeed, fail, after, map, putLine, putInt, getInt, forever, loop, attempt]
imports [pf.Effect]
Task ok err : Effect.Effect (Result ok err)
@ -46,6 +46,15 @@ after = \effect, transform ->
Ok a -> transform a
Err err -> Task.fail err
attempt : Task a b, (Result a b -> Task c d) -> Task c d
attempt = \task, transform ->
Effect.after
task
\result ->
when result is
Ok ok -> transform (Ok ok)
Err err -> transform (Err err)
map : Task a err, (a -> b) -> Task b err
map = \effect, transform ->
Effect.map
@ -61,7 +70,7 @@ putLine = \line -> Effect.map (Effect.putLine line) (\_ -> Ok {})
putInt : I64 -> Task {} *
putInt = \line -> Effect.map (Effect.putInt line) (\_ -> Ok {})
getInt : Task I64 []
getInt : Task I64 [GetIntError]
getInt =
Effect.after
Effect.getInt
@ -69,10 +78,11 @@ getInt =
if
isError
then
# TODO
# when errorCode is
# # A -> Task.fail InvalidCharacter
# # B -> Task.fail IOError
# _ ->
Task.succeed -1
Task.fail GetIntError
else
Task.succeed value