diff options
author | Langston Barrett <langston.barrett@gmail.com> | 2019-02-01 12:33:38 -0800 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-02-08 11:00:19 -0500 |
commit | ee5229834dc5e15cd1eea8427b0e00c50d0fa08b (patch) | |
tree | 9918ba246606e2b1290ce54ae9c51cc758cbbaea | |
parent | d97f0db8fa6c5d9a4c90c6096b01a76da07cfb2b (diff) | |
download | haskell-ee5229834dc5e15cd1eea8427b0e00c50d0fa08b.tar.gz |
TestEquality instance for Compose
-rw-r--r-- | libraries/base/Data/Functor/Compose.hs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/libraries/base/Data/Functor/Compose.hs b/libraries/base/Data/Functor/Compose.hs index 4ddd12cb2f..97d4a35317 100644 --- a/libraries/base/Data/Functor/Compose.hs +++ b/libraries/base/Data/Functor/Compose.hs @@ -1,8 +1,10 @@ -{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE GADTs #-} {-# LANGUAGE PolyKinds #-} +{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE Trustworthy #-} +{-# LANGUAGE TypeOperators #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Functor.Compose @@ -27,6 +29,7 @@ import Data.Functor.Classes import Control.Applicative import Data.Coerce (coerce) import Data.Data (Data) +import Data.Type.Equality (TestEquality(..), (:~:)(..)) import GHC.Generics (Generic, Generic1) import Text.Read (Read(..), readListDefault, readListPrecDefault) @@ -118,3 +121,12 @@ instance (Alternative f, Applicative g) => Alternative (Compose f g) where empty = Compose empty (<|>) = coerce ((<|>) :: f (g a) -> f (g a) -> f (g a)) :: forall a . Compose f g a -> Compose f g a -> Compose f g a + +-- | The deduction (via generativity) that if @g x :~: g y@ then @x :~: y@. +-- +-- @since 4.13.0.0 +instance (TestEquality f) => TestEquality (Compose f g) where + testEquality (Compose x) (Compose y) = + case testEquality x y of -- :: Maybe (g x :~: g y) + Just Refl -> Just Refl -- :: Maybe (x :~: y) + Nothing -> Nothing |