module Hat.Data.WordBuiltin ( Word, Word8, Word16, Word32, Word64 , aWord, aWord8, aWord16, aWord32, aWord64 , toWord, toWord8, toWord16, toWord32, toWord64 , fromWord, fromWord8, fromWord16, fromWord32, fromWord64 ) where import qualified Data.Word import Hat.Hat as Hat import Hat.Prelude -- nasty stuff #if __GLASGOW_HASKELL__ import GHC.Base (unsafeCoerce#) unsafeCoerce = GHC.Base.unsafeCoerce# #elif __NHC__ import NonStdUnsafeCoerce (unsafeCoerce) #endif fakemap :: (a -> b) -> a -> b fakemap f e = unsafeCoerce e ---- newtype Word = Word Data.Word.Word newtype Word8 = Word8 Data.Word.Word8 newtype Word16 = Word16 Data.Word.Word16 newtype Word32 = Word32 Data.Word.Word32 newtype Word64 = Word64 Data.Word.Word64 aWord, aWord8, aWord16, aWord32, aWord64 :: RefAtom aWord = mkAbstract "Word" aWord8 = mkAbstract "Word8" aWord16 = mkAbstract "Word16" aWord32 = mkAbstract "Word32" aWord64 = mkAbstract "Word64" #define TO_FROM(T,MODULE) \ ; to/**/T :: RefExp -> R T -> MODULE.T \ ; to/**/T h (R (T e) _) = e \ ; from/**/T :: RefExp -> MODULE.T -> R T \ ; from/**/T h e = R (T e) (Hat.mkValueUse h mkNoSrcPos a/**/T) #if 0 #define TO_FROM(T,MODULE) \ ; to/**/T :: (RefExp -> R a -> b) -> RefExp -> R T -> MODULE.T \ ; to/**/T f h (R (T e) _) = fakemap (f h) e \ ; from/**/T :: (RefExp -> a -> R b) -> RefExp -> MODULE.T -> R T \ ; from/**/T f h e = R (T (fakemap (f h) e)) (Hat.mkValueUse h mkNoSrcPos a/**/T) #endif TO_FROM(Word,Data.Word) TO_FROM(Word8,Data.Word) TO_FROM(Word16,Data.Word) TO_FROM(Word32,Data.Word) TO_FROM(Word64,Data.Word)