Support both IO and clean version of Generate monad.
[hs-java.git] / JVM / Common.hs
1 {-# LANGUAGE TypeFamilies, StandaloneDeriving, FlexibleInstances, FlexibleContexts, UndecidableInstances #-}
2 -- | This module declares some commonly used functions and instances.
3 module JVM.Common
4   (toCharList,
5   poolSize,
6   (!),
7   showListIx,
8   byteString
9   ) where
10
11 import Codec.Binary.UTF8.String (encodeString, decodeString)
12 import Data.Binary
13 import Data.Binary.Put
14 import qualified Data.ByteString.Lazy as B
15 import qualified Data.Map as M
16 import Data.Default
17 import Data.Char
18 import Data.String
19
20 import JVM.ClassFile
21
22 instance IsString B.ByteString where
23   fromString s = B.pack $ map (fromIntegral . ord) $ encodeString s
24
25 instance Default B.ByteString where
26   def = B.empty
27
28 instance Default Word16 where
29   def = 0
30
31 toCharList :: B.ByteString -> [Int]
32 toCharList bstr = map fromIntegral $ B.unpack bstr
33
34 poolSize :: Pool stage -> Int
35 poolSize = M.size
36
37 (!) :: (Ord k) => M.Map k a -> k -> a
38 (!) = (M.!)
39
40 showListIx :: (Show a) => [a] -> String
41 showListIx list = unlines $ zipWith s [1..] list
42   where s i x = show i ++ ":\t" ++ show x
43
44 byteString ::  (Binary t) => t -> B.ByteString
45 byteString x = runPut (put x)
46