module Hoogle.TextBase.Type where
import Hoogle.TypeSig.All
import Data.Binary.Defer
import General.Code
type TextBase = [(TextItem,String)]
data TextItem = ItemModule [String]
| ItemClass TypeSig
| ItemFunc String TypeSig
| ItemAlias TypeSig TypeSig
| ItemData DataKeyword TypeSig
| ItemInstance TypeSig
| ItemAttribute String String
deriving (Show,Eq)
data DataKeyword = NewTypeKeyword
| DataKeyword
deriving (Enum,Eq)
instance Show DataKeyword where
show NewTypeKeyword = "newtype"
show DataKeyword = "data"
instance BinaryDefer TextItem where
put (ItemModule a ) = putByte 0 >> put1 a
put (ItemClass a ) = putByte 1 >> put1 a
put (ItemFunc a b) = putByte 2 >> put2 a b
put (ItemAlias a b) = putByte 3 >> put2 a b
put (ItemData a b) = putByte 4 >> put2 a b
put (ItemInstance a ) = putByte 5 >> put1 a
put (ItemAttribute a b) = putByte 6 >> put2 a b
get = do
x <- getByte
case x of
0 -> get1 ItemModule
1 -> get1 ItemClass
2 -> get2 ItemFunc
3 -> get2 ItemAlias
4 -> get2 ItemData
5 -> get1 ItemInstance
6 -> get2 ItemAttribute
instance BinaryDefer DataKeyword where
put = putEnumByte
get = getEnumByte