packages feed

lhc-0.6.20090126: lib/base/src/Lhc/Inst/Read.hs

{-# OPTIONS_LHC -N -fm4 #-}

module Lhc.Inst.Read() where

import Prelude.Text
import Data.Int
import Lhc.Basics
import Data.Word
import Lhc.Order
import Lhc.Float
import Prelude.Float
import Lhc.Num
import Numeric(showSigned, showInt, readSigned, readDec, showFloat,
               readFloat, lexDigits)

-- Reading at the Integer type avoids
-- possible difficulty with minInt

m4_define(READINST,{{
instance  Read $1  where
  readsPrec p r = [(fromInteger i, t) | (i,t) <- readsPrec p r]
}})


READINST(Int8)
READINST(Int16)
READINST(Int32)
READINST(Int64)
{-READINST(IntMax)-}
READINST(IntPtr)

m4_define(READWORD,{{
instance  Read $1  where
  readsPrec _ r = readDec r
}})

READWORD(Word)
READWORD(Word8)
READWORD(Word16)
READWORD(Word32)
READWORD(Word64)
READWORD(WordMax)
READWORD(WordPtr)


instance Read () where
    readsPrec p    = readParen False
                            (\r -> [((),t) | ("(",s) <- lex r,
                                             (")",t) <- lex s ] )

instance  Read Double  where
    readsPrec p         = readSigned readDouble

instance  Read Float  where
    readsPrec p s        = [ (doubleToFloat x,y) | (x,y) <- readSigned readDouble s]