shithub: MicroHs

Download patch

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
--