{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module HaskellWorks.Data.Bits.Types.Builtin where

import Control.DeepSeq
import Data.Vector.Storable
import GHC.Generics
import HaskellWorks.Data.Bits.BitWise

-- | Type wrapper to prefer builting operations.
newtype Builtin a = Builtin a deriving (Builtin a
Builtin a -> Builtin a
Builtin a -> Builtin a -> Builtin a
(Builtin a -> Builtin a -> Builtin a)
-> (Builtin a -> Builtin a -> Builtin a)
-> (Builtin a -> Builtin a -> Builtin a)
-> (Builtin a -> Builtin a)
-> Builtin a
-> Builtin a
-> BitWise (Builtin a)
forall a. BitWise a => Builtin a
forall a. BitWise a => Builtin a -> Builtin a
forall a. BitWise a => Builtin a -> Builtin a -> Builtin a
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> a
-> a
-> BitWise a
all1s :: Builtin a
$call1s :: forall a. BitWise a => Builtin a
all0s :: Builtin a
$call0s :: forall a. BitWise a => Builtin a
comp :: Builtin a -> Builtin a
$ccomp :: forall a. BitWise a => Builtin a -> Builtin a
.^. :: Builtin a -> Builtin a -> Builtin a
$c.^. :: forall a. BitWise a => Builtin a -> Builtin a -> Builtin a
.|. :: Builtin a -> Builtin a -> Builtin a
$c.|. :: forall a. BitWise a => Builtin a -> Builtin a -> Builtin a
.&. :: Builtin a -> Builtin a -> Builtin a
$c.&. :: forall a. BitWise a => Builtin a -> Builtin a -> Builtin a
BitWise, Builtin a -> Builtin a -> Bool
(Builtin a -> Builtin a -> Bool)
-> (Builtin a -> Builtin a -> Bool) -> Eq (Builtin a)
forall a. Eq a => Builtin a -> Builtin a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Builtin a -> Builtin a -> Bool
$c/= :: forall a. Eq a => Builtin a -> Builtin a -> Bool
== :: Builtin a -> Builtin a -> Bool
$c== :: forall a. Eq a => Builtin a -> Builtin a -> Bool
Eq, Int -> Builtin a -> ShowS
[Builtin a] -> ShowS
Builtin a -> String
(Int -> Builtin a -> ShowS)
-> (Builtin a -> String)
-> ([Builtin a] -> ShowS)
-> Show (Builtin a)
forall a. Show a => Int -> Builtin a -> ShowS
forall a. Show a => [Builtin a] -> ShowS
forall a. Show a => Builtin a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Builtin a] -> ShowS
$cshowList :: forall a. Show a => [Builtin a] -> ShowS
show :: Builtin a -> String
$cshow :: forall a. Show a => Builtin a -> String
showsPrec :: Int -> Builtin a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Builtin a -> ShowS
Show, Ptr b -> Int -> IO (Builtin a)
Ptr b -> Int -> Builtin a -> IO ()
Ptr (Builtin a) -> IO (Builtin a)
Ptr (Builtin a) -> Int -> IO (Builtin a)
Ptr (Builtin a) -> Int -> Builtin a -> IO ()
Ptr (Builtin a) -> Builtin a -> IO ()
Builtin a -> Int
(Builtin a -> Int)
-> (Builtin a -> Int)
-> (Ptr (Builtin a) -> Int -> IO (Builtin a))
-> (Ptr (Builtin a) -> Int -> Builtin a -> IO ())
-> (forall b. Ptr b -> Int -> IO (Builtin a))
-> (forall b. Ptr b -> Int -> Builtin a -> IO ())
-> (Ptr (Builtin a) -> IO (Builtin a))
-> (Ptr (Builtin a) -> Builtin a -> IO ())
-> Storable (Builtin a)
forall b. Ptr b -> Int -> IO (Builtin a)
forall b. Ptr b -> Int -> Builtin a -> IO ()
forall a. Storable a => Ptr (Builtin a) -> IO (Builtin a)
forall a. Storable a => Ptr (Builtin a) -> Int -> IO (Builtin a)
forall a.
Storable a =>
Ptr (Builtin a) -> Int -> Builtin a -> IO ()
forall a. Storable a => Ptr (Builtin a) -> Builtin a -> IO ()
forall a. Storable a => Builtin a -> Int
forall a b. Storable a => Ptr b -> Int -> IO (Builtin a)
forall a b. Storable a => Ptr b -> Int -> Builtin a -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr (Builtin a) -> Builtin a -> IO ()
$cpoke :: forall a. Storable a => Ptr (Builtin a) -> Builtin a -> IO ()
peek :: Ptr (Builtin a) -> IO (Builtin a)
$cpeek :: forall a. Storable a => Ptr (Builtin a) -> IO (Builtin a)
pokeByteOff :: Ptr b -> Int -> Builtin a -> IO ()
$cpokeByteOff :: forall a b. Storable a => Ptr b -> Int -> Builtin a -> IO ()
peekByteOff :: Ptr b -> Int -> IO (Builtin a)
$cpeekByteOff :: forall a b. Storable a => Ptr b -> Int -> IO (Builtin a)
pokeElemOff :: Ptr (Builtin a) -> Int -> Builtin a -> IO ()
$cpokeElemOff :: forall a.
Storable a =>
Ptr (Builtin a) -> Int -> Builtin a -> IO ()
peekElemOff :: Ptr (Builtin a) -> Int -> IO (Builtin a)
$cpeekElemOff :: forall a. Storable a => Ptr (Builtin a) -> Int -> IO (Builtin a)
alignment :: Builtin a -> Int
$calignment :: forall a. Storable a => Builtin a -> Int
sizeOf :: Builtin a -> Int
$csizeOf :: forall a. Storable a => Builtin a -> Int
Storable, (forall x. Builtin a -> Rep (Builtin a) x)
-> (forall x. Rep (Builtin a) x -> Builtin a)
-> Generic (Builtin a)
forall x. Rep (Builtin a) x -> Builtin a
forall x. Builtin a -> Rep (Builtin a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Builtin a) x -> Builtin a
forall a x. Builtin a -> Rep (Builtin a) x
$cto :: forall a x. Rep (Builtin a) x -> Builtin a
$cfrom :: forall a x. Builtin a -> Rep (Builtin a) x
Generic, Builtin a -> ()
(Builtin a -> ()) -> NFData (Builtin a)
forall a. NFData a => Builtin a -> ()
forall a. (a -> ()) -> NFData a
rnf :: Builtin a -> ()
$crnf :: forall a. NFData a => Builtin a -> ()
NFData)