import «MonadtSample» def ret1 : Except String Nat := .ok 10 def ret2 : Except String Nat := .error "message" def rets : List (Except String Nat) := [.ok 1, .ok 10, .error "problem 1", .error "problem 2", .ok 100000] def liftIO (t : ExceptT String Id α) : IO α := do match t with | .ok r => EStateM.Result.ok r | .error s => EStateM.Result.error s instance : MonadLift (ExceptT String Id) IO where monadLift := liftIO def main : IO Unit := do let fmt := Std.Format.nest 5 <| ".aa gjeoi".toFormat.append ((Std.Format.align true).append ("a".toFormat.append (Std.Format.line.append "b".toFormat))) IO.println fmt -- let ret ← ret2 -- IO.println s!"ret: {ret}" -- let ret ← ret1 -- IO.println s!"ret: {ret}" try let ret ← ret1 IO.println s!"ret1: {ret}" for val in rets do IO.println s!"ret: {val}" catch e => IO.eprintln s!"Error: {e}" #eval main #print main #eval (1.2).mul 100 |>.round |>.div 100 |>.toString |>.toFormat |>.tag 10 #print Task def hoge := main.asTask #check -42.0 #eval 10. * 10^3 #check 10^3 #eval (10.8).toUInt64 #check Float.ofScientific #eval Float.ofScientific 323 true 1 namespace Float def sprintf_1 (x : Float) (a : Nat) : String := let sign : Bool := x > 0 let up := (if sign then x.toUInt64 else (-x).toUInt64) |>.toNat let down := (x - up.toFloat) * (10^a).toFloat |>.round |>.toUInt64 |>.toNat let sign_sign := if sign then "" else "-" s!"{sign_sign}{up}.{down}" end Float #eval (3.14).sprintf_1 0 #eval (3.14).sprintf_1 1 #eval (3.14).sprintf_1 2