packages feed

typesafe-endian-0.1.0.0: src/Data/Endian/Unsafe.hs

{-# LANGUAGE UnicodeSyntax #-}

module Data.Endian.Unsafe (
    BigEndian(),
    LittleEndian(),

    unsafeAssertBigEndian,
    unsafeAssertLittleEndian,

    unsafeUnwrapBigEndian,
    unsafeUnwrapLittleEndian,

    swapEndian
  ) where

import Data.Endian.Internal
import Data.Endian.Wrap

-- | put in BigEndian newtype without any swapping
unsafeAssertBigEndian    ∷ EndianSensitive α ⇒ α → BigEndian α
unsafeAssertBigEndian    = BE
{-# INLINE unsafeAssertBigEndian #-}

-- | put in LittleEndian newtype without any swapping
unsafeAssertLittleEndian ∷ EndianSensitive α ⇒ α → LittleEndian α
unsafeAssertLittleEndian = LE
{-# INLINE unsafeAssertLittleEndian #-}

-- | pull out of BigEndian newtype without any swapping
unsafeUnwrapBigEndian    ∷ EndianSensitive α ⇒ BigEndian α → α
unsafeUnwrapBigEndian    (BE a) = a
{-# INLINE unsafeUnwrapBigEndian #-}

-- | pull out of LittleEndian newtype without any swapping
unsafeUnwrapLittleEndian ∷ EndianSensitive α ⇒ LittleEndian α → α
unsafeUnwrapLittleEndian (LE a) = a
{-# INLINE unsafeUnwrapBigEndian #-}