{-# LANGUAGE FlexibleContexts #-}

module Hyper.Class.Optic
    ( HNodeLens(..)
    , HSubset(..), HSubset'
    ) where

import Control.Lens (Lens', Prism)
import Hyper.Type (type (#))

class HNodeLens s a where
    hNodeLens :: Lens' (s # h) (h # a)

class HSubset s t a b where
    hSubset :: Prism (s # h) (t # h) (a # h) (b # h)

type HSubset' s a = HSubset s s a a