{-# LANGUAGE DataKinds #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Ord.Singletons.Disambiguation -- Copyright : (C) 2019 Ryan Scott -- License : BSD-style (see LICENSE) -- Maintainer : Ryan Scott -- Stability : experimental -- Portability : non-portable -- -- Provides aliases for 'Min' and 'Max' that do not clash with the data -- types of the same names in "Data.Semigroup.Singletons". -- ---------------------------------------------------------------------------- module Data.Ord.Singletons.Disambiguation where import Data.Ord.Singletons import Data.Singletons.TH -- We need these in Data.Semigroup.Singletons, as we need to promote -- code that simultaneously uses the Min/Max constructors and the min/max -- functions, which have clashing defunctionalization symbol names. Our -- workaround is to simply define synonyms for min/max and use those instead. $(singletons [d| min_, max_ :: Ord a => a -> a -> a min_ = min max_ = max |])