handle-like 0.0.0.0 → 0.0.0.1
raw patch · 2 files changed
+17/−15 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.HandleLike: class HandleLike h where hlGetByte h = do { [b] <- unpack <$> hlGet h 1; return b } hlGetLine h = do { b <- hlGetByte h; case b of { 10 -> return "" _ -> cons b <$> hlGetLine h } } hlGetContent = flip hlGet 1
+ Data.HandleLike: class Monad (HandleMonad h) => HandleLike h where type family HandleMonad h hlGetByte h = do { [b] <- unpack `liftM` hlGet h 1; return b } hlGetLine h = do { b <- hlGetByte h; case b of { 10 -> return "" _ -> cons b `liftM` hlGetLine h } } hlGetContent = flip hlGet 1
- Data.HandleLike: hlClose :: HandleLike h => h -> IO ()
+ Data.HandleLike: hlClose :: HandleLike h => h -> HandleMonad h ()
- Data.HandleLike: hlGet :: HandleLike h => h -> Int -> IO ByteString
+ Data.HandleLike: hlGet :: HandleLike h => h -> Int -> HandleMonad h ByteString
- Data.HandleLike: hlGetByte :: HandleLike h => h -> IO Word8
+ Data.HandleLike: hlGetByte :: HandleLike h => h -> HandleMonad h Word8
- Data.HandleLike: hlGetContent :: HandleLike h => h -> IO ByteString
+ Data.HandleLike: hlGetContent :: HandleLike h => h -> HandleMonad h ByteString
- Data.HandleLike: hlGetLine :: HandleLike h => h -> IO ByteString
+ Data.HandleLike: hlGetLine :: HandleLike h => h -> HandleMonad h ByteString
- Data.HandleLike: hlPut :: HandleLike h => h -> ByteString -> IO ()
+ Data.HandleLike: hlPut :: HandleLike h => h -> ByteString -> HandleMonad h ()
- Data.HandleLike: hlPutStrLn :: HandleLike h => h -> ByteString -> IO ()
+ Data.HandleLike: hlPutStrLn :: HandleLike h => h -> ByteString -> HandleMonad h ()
Files
- handle-like.cabal +2/−2
- src/Data/HandleLike.hs +15/−13
handle-like.cabal view
@@ -2,7 +2,7 @@ build-type: Simple name: handle-like-version: 0.0.0.0+version: 0.0.0.1 stability: Experimental author: Yoshikuni Jujo <PAF01143@nifty.ne.jp> maintainer: Yoshikuni Jujo <PAF01143@nifty.ne.jp>@@ -30,7 +30,7 @@ source-repository this type: git location: git://github.com/YoshikuniJujo/forest- tag: handle-like-0.0.0.0+ tag: handle-like-0.0.0.1 library hs-source-dirs: src
src/Data/HandleLike.hs view
@@ -1,38 +1,40 @@-{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings, TypeFamilies, FlexibleContexts #-} module Data.HandleLike (HandleLike(..), hlPutStrLn) where -import Control.Applicative+import Control.Monad import Data.Word import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BSC import System.IO -class HandleLike h where- hlPut :: h -> BS.ByteString -> IO ()- hlGet :: h -> Int -> IO BS.ByteString- hlGetByte :: h -> IO Word8- hlGetLine :: h -> IO BS.ByteString- hlGetContent :: h -> IO BS.ByteString- hlClose :: h -> IO ()+class Monad (HandleMonad h) => HandleLike h where+ type HandleMonad h+ hlPut :: h -> BS.ByteString -> HandleMonad h ()+ hlGet :: h -> Int -> HandleMonad h BS.ByteString+ hlGetByte :: h -> HandleMonad h Word8+ hlGetLine :: h -> HandleMonad h BS.ByteString+ hlGetContent :: h -> HandleMonad h BS.ByteString+ hlClose :: h -> HandleMonad h () - hlGetByte h = do [b] <- BS.unpack <$> hlGet h 1; return b+ hlGetByte h = do [b] <- BS.unpack `liftM` hlGet h 1; return b hlGetLine h = do b <- hlGetByte h case b of 10 -> return ""- _ -> BS.cons b <$> hlGetLine h+ _ -> BS.cons b `liftM` hlGetLine h hlGetContent = flip hlGet 1 instance HandleLike Handle where+ type HandleMonad Handle = IO hlPut = BS.hPut hlGet = BS.hGet -- hlGetByte h = do [b] <- BS.unpack <$> BS.hGet h 1; return b- hlGetLine = (chopCR <$>) . BS.hGetLine+ hlGetLine = (chopCR `liftM`) . BS.hGetLine -- hlGetContent = flip BS.hGet 1 hlClose = hClose -hlPutStrLn :: HandleLike h => h -> BS.ByteString -> IO ()+hlPutStrLn :: HandleLike h => h -> BS.ByteString -> HandleMonad h () hlPutStrLn h = hlPut h . (`BS.append` "\n") chopCR :: BS.ByteString -> BS.ByteString