blob: f6ed5544e274ed43d25b6f1645dbf96a85991bb3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
{-# LANGUAGE ParallelArrays #-}
{-# OPTIONS_GHC -fvectorise #-}
module DefsVect where
import Data.Array.Parallel
-- {-# VECTORISE SCALAR instance Eq Char #-}
-- {-# VECTORISE SCALAR instance Eq Float #-}
-- {-# VECTORISE SCALAR instance Ord Char #-}
-- {-# VECTORISE SCALAR instance Ord Float #-}
data MyBool = MyTrue | MyFalse
class Eq a => Cmp a where
cmp :: a -> a -> Bool
-- FIXME:
-- instance Cmp Int where
-- cmp = (==)
-- isFive :: (Eq a, Num a) => a -> Bool
isFive :: Int -> Bool
isFive x = x == 5
isEq :: Eq a => a -> Bool
isEq x = x == x
fiveEq :: Int -> Bool
fiveEq x = isFive x && isEq x
cmpArrs :: PArray Int -> PArray Int -> Bool
{-# NOINLINE cmpArrs #-}
cmpArrs v w = cmpArrs' (fromPArrayP v) (fromPArrayP w)
cmpArrs' :: [:Int:] -> [:Int:] -> Bool
cmpArrs' xs ys = andP [:x == y | x <- xs | y <- ys:]
isFives :: PArray Int -> Bool
{-# NOINLINE isFives #-}
isFives xs = isFives' (fromPArrayP xs)
isFives' :: [:Int:] -> Bool
isFives' xs = andP (mapP isFive xs)
isEqs :: PArray Int -> Bool
{-# NOINLINE isEqs #-}
isEqs xs = isEqs' (fromPArrayP xs)
isEqs' :: [:Int:] -> Bool
isEqs' xs = andP (mapP isEq xs)
|