packages feed

hypertypes-0.2.2: src/Hyper/Internal/Prelude.hs

{-# LANGUAGE TemplateHaskellQuotes #-}

module Hyper.Internal.Prelude
    ( makeCommonInstances
    , module X
    ) where

import Control.DeepSeq as X (NFData)
import Control.Lens as X (Iso, Traversal, makeLenses, makePrisms)
import Control.Lens.Operators as X
import Control.Monad as X (guard, void)
import Data.Binary as X (Binary)
import Data.Constraint as X (Constraint, Dict (..), (\\))
import Data.Foldable as X (sequenceA_, traverse_)
import Data.Functor.Const as X (Const (..))
import Data.Map as X (Map)
import Data.Maybe as X (fromMaybe)
import Data.Proxy as X (Proxy (..))
import Data.Set as X (Set)
import GHC.Generics as X (Generic, (:*:) (..))
import Generics.Constraints (makeDerivings, makeInstances)
import Language.Haskell.TH (DecsQ, Name)

import Prelude.Compat as X

-- Derive a specific list of classes that types in hypertypes implement.
makeCommonInstances :: [Name] -> DecsQ
makeCommonInstances names =
    (<>)
        <$> makeDerivings [''Eq, ''Ord, ''Show] names
        <*> makeInstances [''Binary, ''NFData] names