moduleData.CopointedwhereimportData.DefaultimportData.Functor.IdentityimportData.Functor.ComposeimportData.Functor.CoproductimportData.TreeimportData.SemigroupasSemigroupimportControl.Monad.Trans.IdentityimportqualifiedControl.Monad.Trans.Writer.LazyasLazyimportqualifiedControl.Monad.Trans.Writer.StrictasStrictimportControl.Comonad.Trans.EnvimportControl.Comonad.Trans.StoreimportControl.Comonad.Trans.TracedimportData.List.NonEmpty(NonEmpty(..))-- | 'Copointed' does not require a 'Functor', as the only relationship-- between 'copoint' and 'fmap' is given by a free theorem.classCopointedpwherecopoint::pa->ainstanceCopointedIdentitywherecopoint=runIdentityinstanceDefaultm=>Copointed((->)m)wherecopointf=fdefinstance(Defaultm,Copointedw)=>Copointed(TracedTmw)wherecopoint(TracedTw)=copointwdefinstanceCopointed((,)a)wherecopoint=sndinstanceCopointed((,,)ab)wherecopoint(_,_,a)=ainstanceCopointed((,,,)abc)wherecopoint(_,_,_,a)=ainstanceCopointedTreewherecopoint=rootLabelinstance(Copointedp,Copointedq)=>Copointed(Composepq)wherecopoint=copoint.copoint.getComposeinstance(Copointedp,Copointedq)=>Copointed(Coproductpq)wherecopoint=coproductcopointcopointinstanceCopointedm=>Copointed(IdentityTm)wherecopoint=copoint.runIdentityTinstanceCopointedm=>Copointed(Lazy.WriterTwm)wherecopoint=fst.copoint.Lazy.runWriterTinstanceCopointedm=>Copointed(Strict.WriterTwm)wherecopoint=fst.copoint.Strict.runWriterTinstanceCopointedDualwherecopoint=getDualinstanceCopointedSumwherecopoint=getSuminstanceCopointedNonEmptywherecopoint~(a:|_)=ainstanceCopointedSemigroup.Firstwherecopoint=Semigroup.getFirstinstanceCopointedSemigroup.Lastwherecopoint=Semigroup.getLastinstanceCopointedSemigroup.Maxwherecopoint=Semigroup.getMaxinstanceCopointedSemigroup.Minwherecopoint=Semigroup.getMininstanceCopointedw=>Copointed(EnvTew)wherecopoint=copoint.lowerEnvTinstanceCopointedw=>Copointed(StoreTsw)wherecopoint(StoreTwfs)=copointwfs