{-# OPTIONS -cpp #-} {-# LANGUAGE RankNTypes, ScopedTypeVariables, MultiParamTypeClasses, FlexibleInstances, TypeSynonymInstances #-} module Curry.Module.IO (module Curry.Module.IO) where import Curry.RunTimeSystem import Curry.Module.Prelude -- begin included import System.IO import qualified System.IO as SI import Control.Concurrent import qualified Control.Exception as CE -- somehow using an either type did not get the curry class for prim through. data IOHandle = One Handle | Two Handle Handle deriving (Show,Eq) type C_Handle = Prim IOHandle inputHandle, outputHandle :: IOHandle -> Handle inputHandle (One h) = h inputHandle (Two h _) = h outputHandle (One h) = h outputHandle (Two _ h) = h instance Read IOHandle where readsPrec = error "reading Handle" instance Generate IOHandle where genFree = error "free variable of type IO-Handle" maxArity _ = error "free variable of type IO-Handle" instance ConvertCH C_IOMode SI.IOMode where toCurry SI.ReadMode = C_ReadMode toCurry SI.WriteMode = C_WriteMode toCurry SI.AppendMode = C_AppendMode fromCurry C_ReadMode = SI.ReadMode fromCurry C_WriteMode = SI.WriteMode fromCurry C_AppendMode = SI.AppendMode instance ConvertCH C_SeekMode SI.SeekMode where toCurry SI.AbsoluteSeek = C_AbsoluteSeek toCurry SI.RelativeSeek = C_RelativeSeek toCurry SI.SeekFromEnd = C_SeekFromEnd fromCurry C_AbsoluteSeek = SI.AbsoluteSeek fromCurry C_RelativeSeek = SI.RelativeSeek fromCurry C_SeekFromEnd = SI.SeekFromEnd stdin :: Result C_Handle stdin _ = PrimValue (One SI.stdin) stdout :: Result C_Handle stdout _ = PrimValue (One SI.stdout) stderr :: Result C_Handle stderr _ = PrimValue (One SI.stderr) prim_openFile :: List C_Char -> C_IOMode -> Result (C_IO C_Handle) prim_openFile = ioFunc2 (\ s m -> do h <- SI.openFile s m Prelude.return (One h)) prim_hClose :: C_Handle -> Result (C_IO T0) prim_hClose = ioFunc1 (\ eh -> case eh of One h -> SI.hClose h Two h1 h2 -> SI.hClose h1 Prelude.>> SI.hClose h2) prim_hFlush :: C_Handle -> Result (C_IO T0) prim_hFlush = ioFunc1 (SI.hFlush . outputHandle) prim_hIsEOF :: C_Handle -> Result (C_IO C_Bool) prim_hIsEOF = ioFunc1 (SI.hIsEOF . inputHandle) prim_hSeek :: C_Handle -> C_SeekMode -> C_Int -> Result (C_IO T0) prim_hSeek = ioFunc3 (\ h -> SI.hSeek (inputHandle h)) prim_hWaitForInput :: C_Handle -> C_Int -> Result (C_IO C_Bool) prim_hWaitForInput = ioFunc2 (\ h -> myhWaitForInput (inputHandle h)) myhWaitForInput :: SI.Handle -> Int -> IO Bool myhWaitForInput h i = if i Prelude.< 0 then SI.hIsEOF h Prelude.>>= Prelude.return . Prelude.not else SI.hWaitForInput h i selectHandle :: [IOHandle] -> Int -> IO Int selectHandle handles t = do mvar <- newEmptyMVar threads <- mapM (\ (i,h) -> forkIO (waitOnHandle (inputHandle h) i t mvar)) (zip [0..] handles) inspectRes (length handles) mvar threads inspectRes :: Int -> MVar (Maybe Int) -> [ThreadId] -> IO Int inspectRes 0 _ _ = Prelude.return (-1) inspectRes n mvar threads = do res <- readMVar mvar case res of Nothing -> inspectRes (n-1) mvar threads Just v -> mapM_ killThread threads Prelude.>> Prelude.return v waitOnHandle :: SI.Handle -> Int -> Int -> MVar (Maybe Int) -> IO () waitOnHandle h v t mvar = do ready <- myhWaitForInput h t putMVar mvar (if ready then Just v else Nothing) prim_hWaitForInputs :: List C_Handle -> C_Int -> Result (C_IO C_Int) prim_hWaitForInputs = ioFunc2 selectHandle prim_hGetChar :: C_Handle -> Result (C_IO C_Char) prim_hGetChar = ioFunc1 (SI.hGetChar . inputHandle) prim_hPutChar :: C_Handle -> C_Char -> Result (C_IO T0) prim_hPutChar = ioFunc2 (SI.hPutChar . outputHandle) prim_hIsReadable :: C_Handle -> Result (C_IO C_Bool) prim_hIsReadable = ioFunc1 (SI.hIsReadable . inputHandle) prim_hIsWritable :: C_Handle -> Result (C_IO C_Bool) prim_hIsWritable = ioFunc1 (SI.hIsWritable . outputHandle) -- end included data C_IOMode = C_ReadMode | C_WriteMode | C_AppendMode | C_IOModeFail Curry.RunTimeSystem.C_Exceptions | C_IOModeOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.IO.C_IOMode) data C_SeekMode = C_AbsoluteSeek | C_RelativeSeek | C_SeekFromEnd | C_SeekModeFail Curry.RunTimeSystem.C_Exceptions | C_SeekModeOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.IO.C_SeekMode) instance BaseCurry Curry.Module.IO.C_IOMode where nf f x st = f(x)(st) gnf f x st = f(x)(st) generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.IO.C_IOModeOr(Curry.RunTimeSystem.mkRef(r)(0)(i))([Curry.Module.IO.C_ReadMode,Curry.Module.IO.C_WriteMode,Curry.Module.IO.C_AppendMode]))(0) failed = Curry.Module.IO.C_IOModeFail branching = Curry.Module.IO.C_IOModeOr consKind (Curry.Module.IO.C_IOModeOr _ _) = Curry.RunTimeSystem.Branching consKind (Curry.Module.IO.C_IOModeFail _) = Curry.RunTimeSystem.Failed consKind _ = Curry.RunTimeSystem.Val exceptions (Curry.Module.IO.C_IOModeFail x) = x orRef (Curry.Module.IO.C_IOModeOr x _) = x branches (Curry.Module.IO.C_IOModeOr _ x) = x instance BaseCurry Curry.Module.IO.C_SeekMode where nf f x st = f(x)(st) gnf f x st = f(x)(st) generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.IO.C_SeekModeOr(Curry.RunTimeSystem.mkRef(r)(0)(i))([Curry.Module.IO.C_AbsoluteSeek,Curry.Module.IO.C_RelativeSeek,Curry.Module.IO.C_SeekFromEnd]))(0) failed = Curry.Module.IO.C_SeekModeFail branching = Curry.Module.IO.C_SeekModeOr consKind (Curry.Module.IO.C_SeekModeOr _ _) = Curry.RunTimeSystem.Branching consKind (Curry.Module.IO.C_SeekModeFail _) = Curry.RunTimeSystem.Failed consKind _ = Curry.RunTimeSystem.Val exceptions (Curry.Module.IO.C_SeekModeFail x) = x orRef (Curry.Module.IO.C_SeekModeOr x _) = x branches (Curry.Module.IO.C_SeekModeOr _ x) = x instance Curry Curry.Module.IO.C_IOMode where strEq Curry.Module.IO.C_ReadMode Curry.Module.IO.C_ReadMode st = Curry.Module.Prelude.strEqSuccess strEq Curry.Module.IO.C_WriteMode Curry.Module.IO.C_WriteMode st = Curry.Module.Prelude.strEqSuccess strEq Curry.Module.IO.C_AppendMode Curry.Module.IO.C_AppendMode st = Curry.Module.Prelude.strEqSuccess strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0)) eq Curry.Module.IO.C_ReadMode Curry.Module.IO.C_ReadMode st = Curry.Module.Prelude.C_True eq Curry.Module.IO.C_WriteMode Curry.Module.IO.C_WriteMode st = Curry.Module.Prelude.C_True eq Curry.Module.IO.C_AppendMode Curry.Module.IO.C_AppendMode st = Curry.Module.Prelude.C_True eq _ _ _ = Curry.Module.Prelude.C_False propagate f Curry.Module.IO.C_ReadMode st = Curry.Module.IO.C_ReadMode propagate f Curry.Module.IO.C_WriteMode st = Curry.Module.IO.C_WriteMode propagate f Curry.Module.IO.C_AppendMode st = Curry.Module.IO.C_AppendMode foldCurry f c Curry.Module.IO.C_ReadMode st = c foldCurry f c Curry.Module.IO.C_WriteMode st = c foldCurry f c Curry.Module.IO.C_AppendMode st = c typeName _ = "IOMode" showQ _ Curry.Module.IO.C_ReadMode = Prelude.showString("IO.ReadMode") showQ _ Curry.Module.IO.C_WriteMode = Prelude.showString("IO.WriteMode") showQ _ Curry.Module.IO.C_AppendMode = Prelude.showString("IO.AppendMode") showQ _ (Curry.Module.IO.C_IOModeOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r)))) instance Curry Curry.Module.IO.C_SeekMode where strEq Curry.Module.IO.C_AbsoluteSeek Curry.Module.IO.C_AbsoluteSeek st = Curry.Module.Prelude.strEqSuccess strEq Curry.Module.IO.C_RelativeSeek Curry.Module.IO.C_RelativeSeek st = Curry.Module.Prelude.strEqSuccess strEq Curry.Module.IO.C_SeekFromEnd Curry.Module.IO.C_SeekFromEnd st = Curry.Module.Prelude.strEqSuccess strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0)) eq Curry.Module.IO.C_AbsoluteSeek Curry.Module.IO.C_AbsoluteSeek st = Curry.Module.Prelude.C_True eq Curry.Module.IO.C_RelativeSeek Curry.Module.IO.C_RelativeSeek st = Curry.Module.Prelude.C_True eq Curry.Module.IO.C_SeekFromEnd Curry.Module.IO.C_SeekFromEnd st = Curry.Module.Prelude.C_True eq _ _ _ = Curry.Module.Prelude.C_False propagate f Curry.Module.IO.C_AbsoluteSeek st = Curry.Module.IO.C_AbsoluteSeek propagate f Curry.Module.IO.C_RelativeSeek st = Curry.Module.IO.C_RelativeSeek propagate f Curry.Module.IO.C_SeekFromEnd st = Curry.Module.IO.C_SeekFromEnd foldCurry f c Curry.Module.IO.C_AbsoluteSeek st = c foldCurry f c Curry.Module.IO.C_RelativeSeek st = c foldCurry f c Curry.Module.IO.C_SeekFromEnd st = c typeName _ = "SeekMode" showQ _ Curry.Module.IO.C_AbsoluteSeek = Prelude.showString("IO.AbsoluteSeek") showQ _ Curry.Module.IO.C_RelativeSeek = Prelude.showString("IO.RelativeSeek") showQ _ Curry.Module.IO.C_SeekFromEnd = Prelude.showString("IO.SeekFromEnd") showQ _ (Curry.Module.IO.C_SeekModeOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r)))) instance Show Curry.Module.IO.C_IOMode where showsPrec _ Curry.Module.IO.C_ReadMode = Prelude.showString("ReadMode") showsPrec _ Curry.Module.IO.C_WriteMode = Prelude.showString("WriteMode") showsPrec _ Curry.Module.IO.C_AppendMode = Prelude.showString("AppendMode") showsPrec _ (Curry.Module.IO.C_IOModeOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r)))) instance Show Curry.Module.IO.C_SeekMode where showsPrec _ Curry.Module.IO.C_AbsoluteSeek = Prelude.showString("AbsoluteSeek") showsPrec _ Curry.Module.IO.C_RelativeSeek = Prelude.showString("RelativeSeek") showsPrec _ Curry.Module.IO.C_SeekFromEnd = Prelude.showString("SeekFromEnd") showsPrec _ (Curry.Module.IO.C_SeekModeOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r)))) instance Read Curry.Module.IO.C_IOMode where readsPrec d r = (Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.IO.C_ReadMode)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("IO")("ReadMode")(r)])(r))((Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.IO.C_WriteMode)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("IO")("WriteMode")(r)])(r))(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.IO.C_AppendMode)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("IO")("AppendMode")(r)])(r))) instance Read Curry.Module.IO.C_SeekMode where readsPrec d r = (Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.IO.C_AbsoluteSeek)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("IO")("AbsoluteSeek")(r)])(r))((Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.IO.C_RelativeSeek)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("IO")("RelativeSeek")(r)])(r))(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.IO.C_SeekFromEnd)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("IO")("SeekFromEnd")(r)])(r))) c_openFile :: (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.Module.IO.C_IOMode -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.IO.C_Handle c_openFile x1 x2 st = Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.cp(Curry.Module.Prelude.pa)(Curry.Module.Prelude.cp(Curry.Module.Prelude.pf))(Curry.Module.IO.c_prim_openFile))(x1)(st))(x2)(st) c_hClose :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_hClose x1 st = Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.pf(Curry.Module.IO.c_prim_hClose))(x1)(st) c_hFlush :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_hFlush x1 st = Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.pf(Curry.Module.IO.c_prim_hFlush))(x1)(st) c_hIsEOF :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_hIsEOF x1 st = Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.pf(Curry.Module.IO.c_prim_hIsEOF))(x1)(st) c_isEOF :: Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_isEOF st = Curry.Module.IO.c_hIsEOF(Curry.Module.IO.c_stdin(st))(st) c_hSeek :: Curry.Module.IO.C_Handle -> Curry.Module.IO.C_SeekMode -> Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_hSeek x1 x2 x3 st = Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.cp(Curry.Module.Prelude.pa)(Curry.Module.Prelude.cp(Curry.Module.Prelude.cp(Curry.Module.Prelude.pa))(Curry.Module.Prelude.cp(Curry.Module.Prelude.cp(Curry.Module.Prelude.pf))))(Curry.Module.IO.c_prim_hSeek))(x1)(st))(x2)(st))(x3)(st) c_hWaitForInput :: Curry.Module.IO.C_Handle -> Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_hWaitForInput x1 x2 st = Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.cp(Curry.Module.Prelude.pa)(Curry.Module.Prelude.cp(Curry.Module.Prelude.pf))(Curry.Module.IO.c_prim_hWaitForInput))(x1)(st))(x2)(st) c_hWaitForInputs :: (Curry.Module.Prelude.List Curry.Module.IO.C_Handle) -> Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Int c_hWaitForInputs x1 x2 st = Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.cp(Curry.Module.Prelude.pa)(Curry.Module.Prelude.cp(Curry.Module.Prelude.pf))(Curry.Module.IO.c_prim_hWaitForInputs))(x1)(st))(x2)(st) c_hReady :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_hReady x1 st = Curry.Module.IO.c_hWaitForInput(x1)(Curry.Module.Prelude.C_Zero)(st) c_hGetChar :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Char c_hGetChar x1 st = Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.pf(Curry.Module.IO.c_prim_hGetChar))(x1)(st) c_hGetLine :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) c_hGetLine x1 st = Curry.Module.Prelude.op_62_62_61(Curry.Module.IO.c_hGetChar(x1)(st))(Curry.Module.Prelude.pf(Curry.Module.IO.c_hGetLine'46_'35lambda2(x1)))(st) c_hGetLine'46_'35lambda2 :: Curry.Module.IO.C_Handle -> Curry.Module.Prelude.C_Char -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) c_hGetLine'46_'35lambda2 x1 x2 st = Curry.Module.IO.c_hGetLine'46_'35lambda2_case_0(x1)(x2)(Curry.Module.Prelude.op_61_61(x2)(Curry.Module.Prelude.C_Char('\n'))(st))(st) c_hGetLine'46_'35lambda2'46_'35lambda3 :: Curry.Module.Prelude.C_Char -> (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) c_hGetLine'46_'35lambda2'46_'35lambda3 x1 x2 st = Curry.Module.Prelude.c_return((Curry.Module.Prelude.:<)(x1)(x2))(st) c_hGetContents :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) c_hGetContents x1 st = Curry.Module.Prelude.op_62_62_61(Curry.Module.IO.c_hIsEOF(x1)(st))(Curry.Module.Prelude.pf(Curry.Module.IO.c_hGetContents'46_'35lambda4(x1)))(st) c_hGetContents'46_'35lambda4 :: Curry.Module.IO.C_Handle -> Curry.Module.Prelude.C_Bool -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) c_hGetContents'46_'35lambda4 x1 x2@Curry.Module.Prelude.C_True st = Curry.Module.Prelude.op_62_62(Curry.Module.IO.c_hClose(x1)(st))(Curry.Module.Prelude.c_return(Curry.Module.Prelude.List)(st))(st) c_hGetContents'46_'35lambda4 x1 x2@Curry.Module.Prelude.C_False st = Curry.Module.Prelude.op_62_62_61(Curry.Module.IO.c_hGetChar(x1)(st))(Curry.Module.Prelude.pf(Curry.Module.IO.c_hGetContents'46_'35lambda4'46_'35lambda5(x1)))(st) c_hGetContents'46_'35lambda4 x1 (Curry.Module.Prelude.C_BoolOr i xs) st = Curry.RunTimeSystem.mapOr(\ x st -> Curry.Module.IO.c_hGetContents'46_'35lambda4(x1)(x)(st))(i)(xs)(st) c_hGetContents'46_'35lambda4 x1 x st = Curry.RunTimeSystem.patternFail("IO.hGetContents._#lambda4")(x) c_hGetContents'46_'35lambda4'46_'35lambda5 :: Curry.Module.IO.C_Handle -> Curry.Module.Prelude.C_Char -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) c_hGetContents'46_'35lambda4'46_'35lambda5 x1 x2 st = Curry.Module.Prelude.op_62_62_61(Curry.Module.IO.c_hGetContents(x1)(st))(Curry.Module.Prelude.pf(Curry.Module.IO.c_hGetContents'46_'35lambda4'46_'35lambda5'46_'35lambda6(x2)))(st) c_hGetContents'46_'35lambda4'46_'35lambda5'46_'35lambda6 :: Curry.Module.Prelude.C_Char -> (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) c_hGetContents'46_'35lambda4'46_'35lambda5'46_'35lambda6 x1 x2 st = Curry.Module.Prelude.c_return((Curry.Module.Prelude.:<)(x1)(x2))(st) c_getContents :: Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) c_getContents st = Curry.Module.IO.c_hGetContents(Curry.Module.IO.c_stdin(st))(st) c_hPutChar :: Curry.Module.IO.C_Handle -> Curry.Module.Prelude.C_Char -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_hPutChar x1 x2 st = Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.cp(Curry.Module.Prelude.pa)(Curry.Module.Prelude.cp(Curry.Module.Prelude.pf))(Curry.Module.IO.c_prim_hPutChar))(x1)(st))(x2)(st) c_hPutStr :: Curry.Module.IO.C_Handle -> (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_hPutStr x1 x2@Curry.Module.Prelude.List st = Curry.Module.Prelude.c_done(st) c_hPutStr x1 x2@((Curry.Module.Prelude.:<) x3 x4) st = Curry.Module.Prelude.op_62_62(Curry.Module.IO.c_hPutChar(x1)(x3)(st))(Curry.Module.IO.c_hPutStr(x1)(x4)(st))(st) c_hPutStr x1 (Curry.Module.Prelude.ListOr i xs) st = Curry.RunTimeSystem.mapOr(\ x st -> Curry.Module.IO.c_hPutStr(x1)(x)(st))(i)(xs)(st) c_hPutStr x1 x st = Curry.RunTimeSystem.patternFail("IO.hPutStr")(x) c_hPutStrLn :: Curry.Module.IO.C_Handle -> (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_hPutStrLn x1 x2 st = Curry.Module.Prelude.op_62_62(Curry.Module.IO.c_hPutStr(x1)(x2)(st))(Curry.Module.IO.c_hPutChar(x1)(Curry.Module.Prelude.C_Char('\n'))(st))(st) c_hPrint :: (Curry t0) => Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.Prim (t0 -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0) c_hPrint x1 st = Curry.Module.Prelude.op_46(Curry.Module.Prelude.pf(Curry.Module.IO.c_hPutStrLn(x1)))(Curry.Module.Prelude.pf(Curry.Module.Prelude.c_show))(st) c_hIsReadable :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_hIsReadable x1 st = Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.pf(Curry.Module.IO.c_prim_hIsReadable))(x1)(st) c_hIsWritable :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_hIsWritable x1 st = Curry.Module.Prelude.op_36_35(Curry.Module.Prelude.pf(Curry.Module.IO.c_prim_hIsWritable))(x1)(st) c_hGetLine'46_'35lambda2_case_0 x1 x2 x3@Curry.Module.Prelude.C_True st = Curry.Module.Prelude.c_return(Curry.Module.Prelude.List)(st) c_hGetLine'46_'35lambda2_case_0 x1 x2 x3@Curry.Module.Prelude.C_False st = Curry.Module.Prelude.op_62_62_61(Curry.Module.IO.c_hGetLine(x1)(st))(Curry.Module.Prelude.pf(Curry.Module.IO.c_hGetLine'46_'35lambda2'46_'35lambda3(x2)))(st) c_hGetLine'46_'35lambda2_case_0 x1 x2 (Curry.Module.Prelude.C_BoolOr i xs) st = Curry.RunTimeSystem.mapOr(\ x st -> Curry.Module.IO.c_hGetLine'46_'35lambda2_case_0(x1)(x2)(x)(st))(i)(xs)(st) c_hGetLine'46_'35lambda2_case_0 x1 x2 x st = Curry.RunTimeSystem.patternFail("IO.hGetLine._#lambda2_case_0")(x) c_stdin :: Curry.RunTimeSystem.State -> Curry.Module.IO.C_Handle c_stdin st = Curry.Module.IO.stdin(st) c_stdout :: Curry.RunTimeSystem.State -> Curry.Module.IO.C_Handle c_stdout st = Curry.Module.IO.stdout(st) c_stderr :: Curry.RunTimeSystem.State -> Curry.Module.IO.C_Handle c_stderr st = Curry.Module.IO.stderr(st) c_prim_openFile :: (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.Module.IO.C_IOMode -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.IO.C_Handle c_prim_openFile x1 x2 st = Curry.Module.IO.prim_openFile(x1)(x2)(st) c_prim_hClose :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_prim_hClose x1 st = Curry.Module.IO.prim_hClose(x1)(st) c_prim_hFlush :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_prim_hFlush x1 st = Curry.Module.IO.prim_hFlush(x1)(st) c_prim_hIsEOF :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_prim_hIsEOF x1 st = Curry.Module.IO.prim_hIsEOF(x1)(st) c_prim_hSeek :: Curry.Module.IO.C_Handle -> Curry.Module.IO.C_SeekMode -> Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_prim_hSeek x1 x2 x3 st = Curry.Module.IO.prim_hSeek(x1)(x2)(x3)(st) c_prim_hWaitForInput :: Curry.Module.IO.C_Handle -> Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_prim_hWaitForInput x1 x2 st = Curry.Module.IO.prim_hWaitForInput(x1)(x2)(st) c_prim_hWaitForInputs :: (Curry.Module.Prelude.List Curry.Module.IO.C_Handle) -> Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Int c_prim_hWaitForInputs x1 x2 st = Curry.Module.IO.prim_hWaitForInputs(x1)(x2)(st) c_prim_hGetChar :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Char c_prim_hGetChar x1 st = Curry.Module.IO.prim_hGetChar(x1)(st) c_prim_hPutChar :: Curry.Module.IO.C_Handle -> Curry.Module.Prelude.C_Char -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.T0 c_prim_hPutChar x1 x2 st = Curry.Module.IO.prim_hPutChar(x1)(x2)(st) c_prim_hIsReadable :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_prim_hIsReadable x1 st = Curry.Module.IO.prim_hIsReadable(x1)(st) c_prim_hIsWritable :: Curry.Module.IO.C_Handle -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Bool c_prim_hIsWritable x1 st = Curry.Module.IO.prim_hIsWritable(x1)(st)