:clown: KV-store

This commit is contained in:
2024-10-04 14:45:28 +02:00
parent 46aa789d64
commit 4ddb42582a
32 changed files with 39 additions and 16 deletions

View File

@ -77,6 +77,8 @@ data EvalOp a
| PrintOp String a
| ErrorOp Error
| TryCatchOp a a
| KvGetOp Val (Val -> a)
| KvPutOp Val Val a
instance Functor EvalOp where
fmap f (ReadOp k) = ReadOp $ f . k
@ -85,6 +87,8 @@ instance Functor EvalOp where
fmap f (PrintOp p m) = PrintOp p $ f m
fmap _ (ErrorOp e) = ErrorOp e
fmap f (TryCatchOp m1 m2) = TryCatchOp (f m1) (f m2)
fmap f (KvGetOp v k) = KvGetOp v (f . k)
fmap f (KvPutOp v1 v2 m) = KvPutOp v1 v2 (f m)
type EvalM a = Free EvalOp a
@ -122,10 +126,10 @@ catch :: EvalM a -> EvalM a -> EvalM a
catch m1 m2 = Free $ TryCatchOp m1 m2
evalKvGet :: Val -> EvalM Val
evalKvGet = error "TODO"
evalKvGet v = Free $ KvGetOp v $ \w -> pure w
evalKvPut :: Val -> Val -> EvalM ()
evalKvPut = error "TODO"
evalKvPut v1 v2 = Free $ KvPutOp v1 v2 $ pure ()
transaction :: EvalM () -> EvalM ()
transaction = error "TODO"