{-# LANGUAGE TypeFamilies #-}
module Proton.Grid where

import Data.Profunctor
import Data.Profunctor.Traversing
import Proton.Types
import Proton.Grate
import Data.Pair
import Proton.Setter
import Proton.Traversal

type Grid s t a b = forall p. (Traversing p, Closed p) => Optic p s t a b
type Grid' s a = Grid s s a a

-- bothT :: Traversal (a, a) (b, b) a b
-- bothT p = _ $ traverse' p

-- beside :: Optic p s t a b -> Optic p s' t' a b -> Optic p (s, s') (t, t') a b
-- beside l r = distributed