vessel-0.1.0.0: src/Data/Vessel/Selectable.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE EmptyCase #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Data.Vessel.Selectable where
------- Selectable convenience class -------
import Data.Functor.Identity
-- A convenience class for producing and consuming functor-indexed containers.
class Selectable v k where
-- | A more convenient type to use for extracting results.
type Selection v k
-- | Build a query given a suitable value for specifying what we're asking for.
-- 'p' will typically be Proxy or Const SelectedCount.
selector :: (forall a. p a) -> k -> v p
-- | From a view, extract a more convenient type of value to use.
selection :: k -> v Identity -> Selection v k