ref: 2cf3c41c81f67d326e6f9b9fbbbff583e375afcb
parent: dc5dfd7af095a366cb43b82bcfa146af2bdd250e
author: Lennart Augustsson <lennart@augustsson.net>
date: Sun Nov 5 11:42:37 EST 2023
Add helper class for interactive top level
--- a/lib/System/IO.hs
+++ b/lib/System/IO.hs
@@ -177,3 +177,15 @@
-- MicroHs is always in binary mode
hSetBinaryMode :: Handle -> Bool -> IO ()
hSetBinaryMode _ _ = return ()
+
+--------
+
+-- Helper for interactive system
+class PrintOrRun a where
+ printOrRun :: a -> IO ()
+
+instance PrintOrRun (IO ()) where
+ printOrRun a = a
+
+instance forall a . Show a => PrintOrRun a where
+ printOrRun a = putStrLn (show a)
--- a/src/MicroHs/Interactive.hs
+++ b/src/MicroHs/Interactive.hs
@@ -109,7 +109,7 @@
itName = "_it"
mkIt :: String -> String
-mkIt l = itName ++ " :: IO ()\n" ++ itName ++ " = print (" ++ l ++ ")\n"+mkIt l = itName ++ " :: IO ()\n" ++ itName ++ " = printOrRun (" ++ l ++ ")\n"err :: Exn -> IO ()
err (Exn s) = putStrLn $ "Error: " ++ s
--
⑨