mirror of
https://github.com/idris-lang/Idris2.git
synced 2024-12-30 07:02:24 +03:00
24 lines
591 B
Idris
24 lines
591 B
Idris
data MyCmd : Type -> Type where
|
|
Display : String -> MyCmd ()
|
|
Input : MyCmd String
|
|
|
|
Pure : ty -> MyCmd ty
|
|
(>>=) : MyCmd a -> (a -> MyCmd b) -> MyCmd b
|
|
|
|
(>>) : MyCmd () -> MyCmd a -> MyCmd a
|
|
ma >> mb = ma >>= const mb
|
|
|
|
runMyCmd : MyCmd a -> IO a
|
|
runMyCmd (Display str) = putStrLn str
|
|
runMyCmd Input = do str <- getLine
|
|
pure str
|
|
runMyCmd (Pure x) = pure x
|
|
runMyCmd (c >>= f) = do res <- runMyCmd c
|
|
runMyCmd (f res)
|
|
|
|
myCmdTest : MyCmd ()
|
|
myCmdTest = do Display "Hello"
|
|
x <- Input
|
|
Display x
|
|
Pure ()
|