{-# LANGUAGE DeriveFunctor #-}

module Asm.BB ( BB (..) ) where

import           Data.Copointed

data BB arch reg freg a b = BB { forall (arch :: * -> * -> * -> *) reg freg a b.
BB arch reg freg a b -> [arch reg freg a]
unBB :: [arch reg freg a], forall (arch :: * -> * -> * -> *) reg freg a b.
BB arch reg freg a b -> b
caBB :: b } deriving ((forall a b.
 (a -> b) -> BB arch reg freg a a -> BB arch reg freg a b)
-> (forall a b. a -> BB arch reg freg a b -> BB arch reg freg a a)
-> Functor (BB arch reg freg a)
forall a b. a -> BB arch reg freg a b -> BB arch reg freg a a
forall a b.
(a -> b) -> BB arch reg freg a a -> BB arch reg freg 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 a a b.
a -> BB arch reg freg a b -> BB arch reg freg a a
forall (arch :: * -> * -> * -> *) reg freg a a b.
(a -> b) -> BB arch reg freg a a -> BB arch reg freg a b
$cfmap :: forall (arch :: * -> * -> * -> *) reg freg a a b.
(a -> b) -> BB arch reg freg a a -> BB arch reg freg a b
fmap :: forall a b.
(a -> b) -> BB arch reg freg a a -> BB arch reg freg a b
$c<$ :: forall (arch :: * -> * -> * -> *) reg freg a a b.
a -> BB arch reg freg a b -> BB arch reg freg a a
<$ :: forall a b. a -> BB arch reg freg a b -> BB arch reg freg a a
Functor)

instance Copointed (BB arch reg freg a) where copoint :: forall a. BB arch reg freg a a -> a
copoint=BB arch reg freg a a -> a
forall (arch :: * -> * -> * -> *) reg freg a b.
BB arch reg freg a b -> b
caBB