module System.IO.Console export { write; writel; writell } import Data.Text import foreign abstract type Console : Effect import foreign c value primPutString : TextLit# -> S Console Void# primPutVector : [r: Region]. Vector# r Word8# -> S Console Void# import foreign c value -- Get the unboxed text literal from a boxed text literal. -- The unboxed version is a pointer to the text data in static memory. takeTextLit : TextLit -> TextLit# where -- | Write text to the console. write (tt: Text): S Console Unit = box case tt of TextLit lit -> do primPutString (takeTextLit lit) () TextVec vec -> do primPutVector vec () TextApp t1 t2 -> do write t1 write t2 -- | Write text to the console with a trailing newline. writel (tt: Text): S Console Unit = do write tt write "\n" -- | Write text to the console with two trailing newlines. writell (tt: Text): S Console Unit = do write tt write "\n\n"