{-# LANGUAGE DeriveFunctor #-} module Asm.BB ( BB (..) ) where import Data.Copointed data BB arch reg freg f2reg a b = BB { forall (arch :: * -> * -> * -> * -> *) reg freg f2reg a b. BB arch reg freg f2reg a b -> [arch reg freg f2reg a] unBB :: [arch reg freg f2reg a], forall (arch :: * -> * -> * -> * -> *) reg freg f2reg a b. BB arch reg freg f2reg a b -> b caBB :: b } deriving ((forall a b. (a -> b) -> BB arch reg freg f2reg a a -> BB arch reg freg f2reg a b) -> (forall a b. a -> BB arch reg freg f2reg a b -> BB arch reg freg f2reg a a) -> Functor (BB arch reg freg f2reg a) forall a b. a -> BB arch reg freg f2reg a b -> BB arch reg freg f2reg a a forall a b. (a -> b) -> BB arch reg freg f2reg a a -> BB arch reg freg f2reg a b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f forall (arch :: * -> * -> * -> * -> *) reg freg f2reg a a b. a -> BB arch reg freg f2reg a b -> BB arch reg freg f2reg a a forall (arch :: * -> * -> * -> * -> *) reg freg f2reg a a b. (a -> b) -> BB arch reg freg f2reg a a -> BB arch reg freg f2reg a b $cfmap :: forall (arch :: * -> * -> * -> * -> *) reg freg f2reg a a b. (a -> b) -> BB arch reg freg f2reg a a -> BB arch reg freg f2reg a b fmap :: forall a b. (a -> b) -> BB arch reg freg f2reg a a -> BB arch reg freg f2reg a b $c<$ :: forall (arch :: * -> * -> * -> * -> *) reg freg f2reg a a b. a -> BB arch reg freg f2reg a b -> BB arch reg freg f2reg a a <$ :: forall a b. a -> BB arch reg freg f2reg a b -> BB arch reg freg f2reg a a Functor) instance Copointed (BB arch reg freg f2reg a) where copoint :: forall a. BB arch reg freg f2reg a a -> a copoint=BB arch reg freg f2reg a a -> a forall (arch :: * -> * -> * -> * -> *) reg freg f2reg a b. BB arch reg freg f2reg a b -> b caBB