module Data.Array.Parallel.Prelude.Word8 (
Word8,
(==), (/=), (<), (<=), (>), (>=), min, max,
minimumP, maximumP, minIndexP, maxIndexP,
(+), (), (*), negate, abs,
sumP, productP,
div, mod, sqrt,
toInt, fromInt
) where
import Data.Array.Parallel.VectDepend ()
import Data.Array.Parallel.PArr
import Data.Array.Parallel.Lifted.Scalar
import Data.Array.Parallel.Lifted.Closure
import Prelude (Int, Bool)
import Data.Word (Word8)
import qualified Prelude as P
infixl 7 *
infixl 6 +,
infix 4 ==, /=, <, <=, >, >=
infixl 7 `div`, `mod`
(==), (/=), (<), (<=), (>), (>=) :: Word8 -> Word8 -> Bool
(==) = (P.==)
(/=) = (P./=)
(<=) = (P.<=)
(<) = (P.<)
(>=) = (P.>=)
(>) = (P.>)
min, max :: Word8 -> Word8 -> Word8
min = P.min
max = P.max
minimumP, maximumP :: [:Word8:] -> Word8
minimumP a = a `indexPArr` 0
maximumP a = a `indexPArr` 0
minIndexP :: [:Word8:] -> Int
minIndexP _ = 0
minIndexPA :: PArray Word8 :-> Int
minIndexPA = closure1 (scalar_fold1Index min') (scalar_fold1sIndex min')
min' (i,x) (j,y) | x P.<= y = (i,x)
| P.otherwise = (j,y)
maxIndexP :: [:Word8:] -> Int
maxIndexP _ = 0
maxIndexPA :: PArray Word8 :-> Int
maxIndexPA = closure1 (scalar_fold1Index max') (scalar_fold1sIndex max')
max' (i,x) (j,y) | x P.>= y = (i,x)
| P.otherwise = (j,y)
(+), (), (*) :: Word8 -> Word8 -> Word8
(+) = (P.+)
() = (P.-)
(*) = (P.*)
negate, abs :: Word8 -> Word8
negate = P.negate
abs = P.abs
sumP, productP :: [:Word8:] -> Word8
sumP a = a `indexPArr` 0
productP a = a `indexPArr` 0
div, mod :: Word8 -> Word8 -> Word8
div = P.div
mod = P.mod
sqrt :: Word8 -> Word8
sqrt n = P.floor (P.sqrt (P.fromIntegral n) :: P.Double)
toInt :: Word8 -> Int
toInt = P.fromIntegral
fromInt :: Int -> Word8
fromInt = P.fromIntegral