packages feed

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