{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Vec.DataFamily.SpineStrict.Lens (
ix,
_Cons,
_head,
_tail,
_Pull,
_Vec,
) where
import Control.Applicative ((<$>))
import Data.Fin (Fin (..))
import Data.Nat (Nat (..))
import Prelude (($), (.), Functor (..))
import qualified Control.Lens as L
import qualified Data.Fin as F
import qualified Data.Type.Nat as N
import qualified Data.Vec.Pull as P
import Data.Vec.DataFamily.SpineStrict
_Cons :: L.Iso (Vec ('S n) a) (Vec ('S n) b) (a, Vec n a) (b, Vec n b)
_Cons :: forall (n :: Nat) a b (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p (a, Vec n a) (f (b, Vec n b))
-> p (Vec ('S n) a) (f (Vec ('S n) b))
_Cons = (Vec ('S n) a -> (a, Vec n a))
-> ((b, Vec n b) -> Vec ('S n) b)
-> Iso (Vec ('S n) a) (Vec ('S n) b) (a, Vec n a) (b, Vec n b)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
L.iso (\(a
x ::: Vec n a
xs) -> (a
x, Vec n a
xs)) (\(b
x, Vec n b
xs) -> b
x b -> Vec n b -> Vec ('S n) b
forall (n :: Nat) a. a -> Vec n a -> Vec ('S n) a
::: Vec n b
xs)
_head :: L.Lens' (Vec ('S n) a) a
_head :: forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head a -> f a
f (a
x ::: Vec n a
xs) = (a -> Vec n a -> Vec ('S n) a
forall (n :: Nat) a. a -> Vec n a -> Vec ('S n) a
::: Vec n a
xs) (a -> Vec ('S n) a) -> f a -> f (Vec ('S n) a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f a
f a
x
{-# INLINE _head #-}
_tail :: L.Lens' (Vec ('S n) a) (Vec n a)
_tail :: forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail Vec n a -> f (Vec n a)
f (a
x ::: Vec n a
xs) = (a
x a -> Vec n a -> Vec ('S n) a
forall (n :: Nat) a. a -> Vec n a -> Vec ('S n) a
:::) (Vec n a -> Vec ('S n) a) -> f (Vec n a) -> f (Vec ('S n) a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vec n a -> f (Vec n a)
f Vec n a
xs
{-# INLINE _tail #-}
_Pull :: N.SNatI n => L.Iso (Vec n a) (Vec n b) (P.Vec n a) (P.Vec n b)
_Pull :: forall (n :: Nat) a b.
SNatI n =>
Iso (Vec n a) (Vec n b) (Vec n a) (Vec n b)
_Pull = (Vec n a -> Vec n a)
-> (Vec n b -> Vec n b)
-> Iso (Vec n a) (Vec n b) (Vec n a) (Vec n b)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
L.iso Vec n a -> Vec n a
forall (n :: Nat) a. SNatI n => Vec n a -> Vec n a
toPull Vec n b -> Vec n b
forall (n :: Nat) a. SNatI n => Vec n a -> Vec n a
fromPull
_Vec :: N.SNatI n => L.Prism' [a] (Vec n a)
_Vec :: forall (n :: Nat) a. SNatI n => Prism' [a] (Vec n a)
_Vec = (Vec n a -> [a])
-> ([a] -> Maybe (Vec n a)) -> Prism [a] [a] (Vec n a) (Vec n a)
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
L.prism' Vec n a -> [a]
forall (n :: Nat) a. SNatI n => Vec n a -> [a]
toList [a] -> Maybe (Vec n a)
forall (n :: Nat) a. SNatI n => [a] -> Maybe (Vec n a)
fromList
ix :: forall n f a. (N.SNatI n, Functor f) => Fin n -> L.LensLike' f (Vec n a) a
ix :: forall (n :: Nat) (f :: * -> *) a.
(SNatI n, Functor f) =>
Fin n -> LensLike' f (Vec n a) a
ix Fin n
f = IxLens f n a -> Fin n -> LensLike' f (Vec n a) a
forall (f :: * -> *) (n :: Nat) a.
IxLens f n a -> Fin n -> LensLike' f (Vec n a) a
getIxLens (IxLens f 'Z a
-> (forall (m :: Nat).
SNatI m =>
IxLens f m a -> IxLens f ('S m) a)
-> IxLens f n a
forall (n :: Nat) (f :: Nat -> * -> *) a.
SNatI n =>
f 'Z a
-> (forall (m :: Nat). SNatI m => f m a -> f ('S m) a) -> f n a
N.induction1 IxLens f 'Z a
start IxLens f m a -> IxLens f ('S m) a
forall (m :: Nat). SNatI m => IxLens f m a -> IxLens f ('S m) a
forall (m :: Nat). IxLens f m a -> IxLens f ('S m) a
step) Fin n
f where
start :: IxLens f 'Z a
start :: IxLens f 'Z a
start = (Fin 'Z -> LensLike' f (Vec 'Z a) a) -> IxLens f 'Z a
forall (f :: * -> *) (n :: Nat) a.
(Fin n -> LensLike' f (Vec n a) a) -> IxLens f n a
IxLens Fin 'Z -> LensLike' f (Vec 'Z a) a
forall b. Fin 'Z -> b
F.absurd
step :: IxLens f m a -> IxLens f ('S m) a
step :: forall (m :: Nat). IxLens f m a -> IxLens f ('S m) a
step (IxLens Fin m -> LensLike' f (Vec m a) a
l) = (Fin ('S m) -> LensLike' f (Vec ('S m) a) a) -> IxLens f ('S m) a
forall (f :: * -> *) (n :: Nat) a.
(Fin n -> LensLike' f (Vec n a) a) -> IxLens f n a
IxLens ((Fin ('S m) -> LensLike' f (Vec ('S m) a) a) -> IxLens f ('S m) a)
-> (Fin ('S m) -> LensLike' f (Vec ('S m) a) a)
-> IxLens f ('S m) a
forall a b. (a -> b) -> a -> b
$ \Fin ('S m)
i -> case Fin ('S m)
i of
Fin ('S m)
FZ -> LensLike' f (Vec ('S m) a) a
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
FS Fin n1
j -> (Vec m a -> f (Vec m a)) -> Vec ('S m) a -> f (Vec ('S m) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec m a -> f (Vec m a)) -> Vec ('S m) a -> f (Vec ('S m) a))
-> LensLike' f (Vec m a) a -> LensLike' f (Vec ('S m) a) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Fin m -> LensLike' f (Vec m a) a
l Fin m
Fin n1
j
newtype IxLens f n a = IxLens { forall (f :: * -> *) (n :: Nat) a.
IxLens f n a -> Fin n -> LensLike' f (Vec n a) a
getIxLens :: Fin n -> L.LensLike' f (Vec n a) a }
instance N.SNatI n => L.Each (Vec n a) (Vec n b) a b where
each :: Traversal (Vec n a) (Vec n b) a b
each = (a -> f b) -> Vec n a -> f (Vec n b)
forall (n :: Nat) (f :: * -> *) a b.
(Applicative f, SNatI n) =>
(a -> f b) -> Vec n a -> f (Vec n b)
traverse
type instance L.Index (Vec n a) = Fin n
type instance L.IxValue (Vec n a) = a
instance N.SNatI n => L.Ixed (Vec n a) where
ix :: Index (Vec n a) -> Traversal' (Vec n a) (IxValue (Vec n a))
ix Index (Vec n a)
i = Fin n -> LensLike' f (Vec n a) a
forall (n :: Nat) (f :: * -> *) a.
(SNatI n, Functor f) =>
Fin n -> LensLike' f (Vec n a) a
ix Fin n
Index (Vec n a)
i
instance L.Field1 (Vec ('S n) a) (Vec ('S n) a) a a where
_1 :: Lens (Vec ('S n) a) (Vec ('S n) a) a a
_1 = (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
instance L.Field2 (Vec ('S ('S n)) a) (Vec ('S ('S n)) a) a a where
_2 :: Lens (Vec ('S ('S n)) a) (Vec ('S ('S n)) a) a a
_2 = (Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> ((a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a))
-> (a -> f a)
-> Vec ('S ('S n)) a
-> f (Vec ('S ('S n)) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
instance L.Field3 (Vec ('S ('S ('S n))) a) (Vec ('S ('S ('S n))) a) a a where
_3 :: Lens (Vec ('S ('S ('S n))) a) (Vec ('S ('S ('S n))) a) a a
_3 = (Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> ((a -> f a) -> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> (a -> f a)
-> Vec ('S ('S ('S n))) a
-> f (Vec ('S ('S ('S n))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> ((a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a))
-> (a -> f a)
-> Vec ('S ('S n)) a
-> f (Vec ('S ('S n)) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
instance L.Field4 (Vec ('S ('S ('S ('S n)))) a) (Vec ('S ('S ('S ('S n)))) a) a a where
_4 :: Lens
(Vec ('S ('S ('S ('S n)))) a) (Vec ('S ('S ('S ('S n)))) a) a a
_4 = (Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S n)))) a
-> f (Vec ('S ('S ('S ('S n)))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> ((a -> f a) -> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> (a -> f a)
-> Vec ('S ('S ('S n))) a
-> f (Vec ('S ('S ('S n))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> ((a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a))
-> (a -> f a)
-> Vec ('S ('S n)) a
-> f (Vec ('S ('S n)) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
instance L.Field5 (Vec ('S ('S ('S ('S ('S n))))) a) (Vec ('S ('S ('S ('S ('S n))))) a) a a where
_5 :: Lens
(Vec ('S ('S ('S ('S ('S n))))) a)
(Vec ('S ('S ('S ('S ('S n))))) a)
a
a
_5 = (Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S n)))) a
-> f (Vec ('S ('S ('S ('S n)))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> ((a -> f a) -> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> (a -> f a)
-> Vec ('S ('S ('S n))) a
-> f (Vec ('S ('S ('S n))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> ((a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a))
-> (a -> f a)
-> Vec ('S ('S n)) a
-> f (Vec ('S ('S n)) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
instance L.Field6 (Vec ('S ('S ('S ('S ('S ('S n)))))) a) (Vec ('S ('S ('S ('S ('S ('S n)))))) a) a a where
_6 :: Lens
(Vec ('S ('S ('S ('S ('S ('S n)))))) a)
(Vec ('S ('S ('S ('S ('S ('S n)))))) a)
a
a
_6 = (Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S n)))) a
-> f (Vec ('S ('S ('S ('S n)))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> ((a -> f a) -> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> (a -> f a)
-> Vec ('S ('S ('S n))) a
-> f (Vec ('S ('S ('S n))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> ((a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a))
-> (a -> f a)
-> Vec ('S ('S n)) a
-> f (Vec ('S ('S n)) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
instance L.Field7 (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a) (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a) a a where
_7 :: Lens
(Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a)
(Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a)
a
a
_7 = (Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S n)))) a
-> f (Vec ('S ('S ('S ('S n)))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> ((a -> f a) -> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> (a -> f a)
-> Vec ('S ('S ('S n))) a
-> f (Vec ('S ('S ('S n))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> ((a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a))
-> (a -> f a)
-> Vec ('S ('S n)) a
-> f (Vec ('S ('S n)) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
instance L.Field8 (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a) (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a) a a where
_8 :: Lens
(Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a)
(Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a)
a
a
_8 = (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S n)))) a
-> f (Vec ('S ('S ('S ('S n)))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> ((a -> f a) -> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> (a -> f a)
-> Vec ('S ('S ('S n))) a
-> f (Vec ('S ('S ('S n))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> ((a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a))
-> (a -> f a)
-> Vec ('S ('S n)) a
-> f (Vec ('S ('S n)) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head
instance L.Field9 (Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a) (Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a) a a where
_9 :: Lens
(Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a)
(Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a)
a
a
_9 = (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S ('S n))))))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S ('S n)))))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S ('S n))))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S ('S n)))))) a
-> f (Vec ('S ('S ('S ('S ('S ('S n)))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S ('S n))))) a
-> f (Vec ('S ('S ('S ('S ('S n))))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> Vec ('S ('S ('S ('S n)))) a -> f (Vec ('S ('S ('S ('S n)))) a))
-> ((a -> f a)
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> (a -> f a)
-> Vec ('S ('S ('S ('S n)))) a
-> f (Vec ('S ('S ('S ('S n)))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> Vec ('S ('S ('S n))) a -> f (Vec ('S ('S ('S n))) a))
-> ((a -> f a) -> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> (a -> f a)
-> Vec ('S ('S ('S n))) a
-> f (Vec ('S ('S ('S n))) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(Vec n a -> f (Vec n a)) -> Vec ('S n) a -> f (Vec ('S n) a)
_tail ((Vec ('S n) a -> f (Vec ('S n) a))
-> Vec ('S ('S n)) a -> f (Vec ('S ('S n)) a))
-> ((a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a))
-> (a -> f a)
-> Vec ('S ('S n)) a
-> f (Vec ('S ('S n)) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
forall (n :: Nat) a (f :: * -> *).
Functor f =>
(a -> f a) -> Vec ('S n) a -> f (Vec ('S n) a)
_head