Save notify-due-items user task

This commit is contained in:
Eike Kettner
2020-04-21 00:39:39 +02:00
parent 3a90d874a5
commit 93182c040e
4 changed files with 196 additions and 9 deletions

View File

@@ -1,9 +1,16 @@
module Data.Validated exposing (Validated(..), value)
module Data.Validated exposing
( Validated(..)
, map
, map2
, map3
, map4
, value
)
type Validated a
= Valid a
| Invalid a
| Invalid (List String) a
| Unknown a
@@ -13,8 +20,81 @@ value va =
Valid a ->
a
Invalid a ->
Invalid _ a ->
a
Unknown a ->
a
map : (a -> b) -> Validated a -> Validated b
map f va =
case va of
Valid a ->
Valid (f a)
Invalid em a ->
Invalid em (f a)
Unknown a ->
Unknown (f a)
map2 : (a -> b -> c) -> Validated a -> Validated b -> Validated c
map2 f va vb =
case ( va, vb ) of
( Valid a, Valid b ) ->
Valid (f a b)
( Valid a, Invalid em b ) ->
Invalid em (f a b)
( Valid a, Unknown b ) ->
Unknown (f a b)
( Invalid em a, Valid b ) ->
Invalid em (f a b)
( Invalid em1 a, Invalid em2 b ) ->
Invalid (em1 ++ em2) (f a b)
( Invalid em a, Unknown b ) ->
Invalid em (f a b)
( Unknown a, Valid b ) ->
Unknown (f a b)
( Unknown a, Invalid em b ) ->
Invalid em (f a b)
( Unknown a, Unknown b ) ->
Unknown (f a b)
map3 :
(a -> b -> c -> d)
-> Validated a
-> Validated b
-> Validated c
-> Validated d
map3 f va vb vc =
let
vab =
map2 (\e1 -> \e2 -> f e1 e2) va vb
in
map2 (\g -> \e3 -> g e3) vab vc
map4 :
(a -> b -> c -> d -> e)
-> Validated a
-> Validated b
-> Validated c
-> Validated d
-> Validated e
map4 f va vb vc vd =
let
vabc =
map3 (\e1 -> \e2 -> \e3 -> f e1 e2 e3) va vb vc
in
map2 (\g -> \e4 -> g e4) vabc vd