liquidhaskell-0.8.10.7: tests/typeclasses/pos/Lemma.hs
{-# LANGUAGE RankNTypes #-}
{-@ LIQUID "--reflection" @-}
{-@ LIQUID "--typeclass" @-}
module Lemma where
import Prelude hiding (Semigroup(..), mappend)
import Semigroup
-- YL: why is it necessary to include Lib?
import Lib
{-@ assoc4 :: VSemigroup a => x:a -> y:a -> z:a -> h:a -> {mappend x (mappend y (mappend z h)) == mappend (mappend (mappend x y) z) h} @-}
assoc4 :: VSemigroup a => a -> a -> a -> a -> ()
assoc4 x y z h =
() `const`
mappend x (mappend y (mappend z h)) `const`
lawAssociative y z h `const`
mappend x (mappend (mappend y z) h) `const`
lawAssociative x (mappend y z) h `const`
mappend (mappend x (mappend y z)) h `const`
lawAssociative x y z `const`
mappend (mappend (mappend x y) z) h