module Codata.IO.Types where
open import Data.Maybe.Base
open import Data.Nat.Base using (ℕ)
open import Foreign.Haskell.Coerce
module FFI where
import Foreign.Haskell as FFI
data BufferMode : Set where
NoBuffering LineBuffering : BufferMode
BlockBuffering : FFI.Maybe ℕ → BufferMode
{-# FOREIGN GHC import qualified System.IO as SIO #-}
{-# FOREIGN GHC
data AgdaBufferMode
= NoBuffering
| LineBuffering
| BlockBuffering (Maybe Integer)
toBufferMode :: AgdaBufferMode -> SIO.BufferMode
toBufferMode x = case x of
NoBuffering -> SIO.NoBuffering
LineBuffering -> SIO.LineBuffering
BlockBuffering mi -> SIO.BlockBuffering (fromIntegral <$> mi)
fromBufferMode :: SIO.BufferMode -> AgdaBufferMode
fromBufferMode x = case x of
SIO.NoBuffering -> NoBuffering
SIO.LineBuffering -> LineBuffering
SIO.BlockBuffering mi -> BlockBuffering (fromIntegral <$> mi)
#-}
{-# COMPILE GHC BufferMode = data AgdaBufferMode
( NoBuffering
| LineBuffering
| BlockBuffering
)
#-}
data BufferMode : Set where
NoBuffering LineBuffering : BufferMode
BlockBuffering : Maybe ℕ → BufferMode
instance
bufferMode-fromFFI : Coercible FFI.BufferMode BufferMode
bufferMode-fromFFI = TrustMe
bufferMode-toFFI : Coercible BufferMode FFI.BufferMode
bufferMode-toFFI = TrustMe