T7848.hs:6:57: error: Occurs check: cannot construct the infinite type: t2 ~ t0 -> t -> t1 -> A -> A -> A -> A -> t2 Relevant bindings include y :: forall t4. t4 -> t -> t1 -> A -> A -> A -> A -> t2 (bound at T7848.hs:8:9) (&) :: t -> t1 -> A -> A -> A -> A -> t2 (bound at T7848.hs:11:9) z :: t1 (bound at T7848.hs:6:12) (&) :: t1 (bound at T7848.hs:6:8) (+) :: t (bound at T7848.hs:6:3) x :: t -> t1 -> A -> A -> A -> A -> t2 (bound at T7848.hs:6:1) In the expression: y In an equation for ‘x’: x (+) ((&)@z) ((:&&) a b) (c :&& d) (e `A` f) (A g h) = y where infixl 3 `y` y _ = (&) {-# INLINE (&) #-} {-# SPECIALIZE (&) :: a #-} (&) = x T7848.hs:10:9: error: Couldn't match expected type ‘t -> t1 -> A -> A -> A -> A -> t2’ with actual type ‘a’ ‘a’ is a rigid type variable bound by the type signature for: (&) :: a at T7848.hs:10:9 Relevant bindings include z :: t1 (bound at T7848.hs:6:12) (&) :: t1 (bound at T7848.hs:6:8) (+) :: t (bound at T7848.hs:6:3) x :: t -> t1 -> A -> A -> A -> A -> t2 (bound at T7848.hs:6:1) In the SPECIALISE pragma {-# SPECIALIZE (&) :: a #-} In an equation for ‘x’: x (+) ((&)@z) ((:&&) a b) (c :&& d) (e `A` f) (A g h) = y where infixl 3 `y` y _ = (&) {-# INLINE (&) #-} {-# SPECIALIZE (&) :: a #-} (&) = x