Skip to content

Commit c22387e

Browse files
authored
Merge pull request #561 from Tjalle-S/monoid-instances
Monoid instance for Exp Ordering
2 parents 765ac29 + f37110b commit c22387e

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

src/Data/Array/Accelerate/Data/Monoid.hs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
{-# LANGUAGE BlockArguments #-}
12
{-# LANGUAGE CPP #-}
23
{-# LANGUAGE ConstraintKinds #-}
34
{-# LANGUAGE FlexibleContexts #-}
45
{-# LANGUAGE FlexibleInstances #-}
6+
{-# LANGUAGE LambdaCase #-}
57
{-# LANGUAGE MultiParamTypeClasses #-}
68
{-# LANGUAGE PatternSynonyms #-}
79
{-# LANGUAGE ScopedTypeVariables #-}
@@ -46,6 +48,7 @@ import Data.Array.Accelerate.Pattern
4648
import Data.Array.Accelerate.Smart
4749
import Data.Array.Accelerate.Sugar.Elt
4850
import Data.Array.Accelerate.Type
51+
import Data.Array.Accelerate.Prelude ( match )
4952

5053
import Data.Function
5154
import Data.Monoid hiding ( (<>) )
@@ -171,3 +174,22 @@ instance (Elt a, Elt b, Elt c, Elt d, Monoid (Exp a), Monoid (Exp b), Monoid (Ex
171174
instance (Elt a, Elt b, Elt c, Elt d, Elt e, Monoid (Exp a), Monoid (Exp b), Monoid (Exp c), Monoid (Exp d), Monoid (Exp e)) => Monoid (Exp (a,b,c,d,e)) where
172175
mempty = T5 mempty mempty mempty mempty mempty
173176

177+
178+
-- Lexicographical ordering
179+
-- ------------------------
180+
181+
-- | @since 1.4.0.0
182+
instance Semigroup (Exp Ordering) where
183+
x <> y = x & match \case
184+
LT_ -> LT_
185+
EQ_ -> y
186+
GT_ -> GT_
187+
188+
stimes n x = case P.compare n 0 of
189+
LT -> P.errorWithoutStackTrace "stimes: Exp Ordering, negative multiplier"
190+
EQ -> EQ_
191+
GT -> x
192+
193+
-- | @since 1.4.0.0
194+
instance Monoid (Exp Ordering) where
195+
mempty = EQ_

0 commit comments

Comments
 (0)