{-# LANGUAGE FlexibleInstances #-}
module Data.Endian (Be(..), Le(..)) where
import Data.Binary.Put
import Data.Binary.Get
import Data.Binary
newtype Be a = Be { forall a. Be a -> a
fromBe :: a } deriving Be a -> Be a -> Bool
forall a. Eq a => Be a -> Be a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Be a -> Be a -> Bool
$c/= :: forall a. Eq a => Be a -> Be a -> Bool
== :: Be a -> Be a -> Bool
$c== :: forall a. Eq a => Be a -> Be a -> Bool
Eq
newtype Le a = Le { forall a. Le a -> a
fromLe :: a } deriving Le a -> Le a -> Bool
forall a. Eq a => Le a -> Le a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Le a -> Le a -> Bool
$c/= :: forall a. Eq a => Le a -> Le a -> Bool
== :: Le a -> Le a -> Bool
$c== :: forall a. Eq a => Le a -> Le a -> Bool
Eq
instance Binary (Be Word16) where
put :: Be Word16 -> Put
put = Word16 -> Put
putWord16be forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Be a -> a
fromBe
get :: Get (Be Word16)
get = forall a. a -> Be a
Be forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16be
instance Binary (Le Word16) where
put :: Le Word16 -> Put
put = Word16 -> Put
putWord16le forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Le a -> a
fromLe
get :: Get (Le Word16)
get = forall a. a -> Le a
Le forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le
instance Binary (Be Word32) where
put :: Be Word32 -> Put
put = Word32 -> Put
putWord32be forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Be a -> a
fromBe
get :: Get (Be Word32)
get = forall a. a -> Be a
Be forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32be
instance Binary (Le Word32) where
put :: Le Word32 -> Put
put = Word32 -> Put
putWord32le forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Le a -> a
fromLe
get :: Get (Le Word32)
get = forall a. a -> Le a
Le forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le
instance Binary (Be Word64) where
put :: Be Word64 -> Put
put = Word64 -> Put
putWord64be forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Be a -> a
fromBe
get :: Get (Be Word64)
get = forall a. a -> Be a
Be forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word64
getWord64be
instance Binary (Le Word64) where
put :: Le Word64 -> Put
put = Word64 -> Put
putWord64le forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Le a -> a
fromLe
get :: Get (Le Word64)
get = forall a. a -> Le a
Le forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word64
getWord64le