Use type families to distinguish class parsing/building stages.
[hs-java.git] / JVM / Types.hs
1 {-# LANGUAGE TypeFamilies, StandaloneDeriving, FlexibleInstances, FlexibleContexts, UndecidableInstances #-}
2 -- | This module declares `high-level' data types for Java classes, methods etc.
3 module JVM.Types where
4
5 import Codec.Binary.UTF8.String hiding (encode, decode)
6 import Control.Applicative
7 import Data.Binary
8 import Data.Binary.Put
9 import qualified Data.ByteString.Lazy as B
10 import Data.Char
11 import Data.String
12 import qualified Data.Set as S
13 import qualified Data.Map as M
14
15 import JVM.ClassFile
16
17 instance IsString B.ByteString where
18   fromString s = B.pack $ map (fromIntegral . ord) $ encodeString s
19
20 toCharList :: B.ByteString -> [Int]
21 toCharList bstr = map fromIntegral $ B.unpack bstr
22
23 poolSize :: Pool stage -> Int
24 poolSize = M.size
25
26 (!) :: (Ord k) => M.Map k a -> k -> a
27 (!) = (M.!)
28
29 showListIx :: (Show a) => [a] -> String
30 showListIx list = unlines $ zipWith s [1..] list
31   where s i x = show i ++ ":\t" ++ show x
32
33 byteString ::  (Binary t) => t -> B.ByteString
34 byteString x = runPut (put x)
35