module Halogen.Query.HalogenQ where import Data.Functor.Coyoneda import HPrelude data HalogenQ query msg input a = Initialize a | Finalize a | Receive input a | Action msg a | Query (Coyoneda query a) (() -> a) deriving ((forall a b. (a -> b) -> HalogenQ query msg input a -> HalogenQ query msg input b) -> (forall a b. a -> HalogenQ query msg input b -> HalogenQ query msg input a) -> Functor (HalogenQ query msg input) forall a b. a -> HalogenQ query msg input b -> HalogenQ query msg input a forall a b. (a -> b) -> HalogenQ query msg input a -> HalogenQ query msg input b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f forall (query :: * -> *) msg input a b. a -> HalogenQ query msg input b -> HalogenQ query msg input a forall (query :: * -> *) msg input a b. (a -> b) -> HalogenQ query msg input a -> HalogenQ query msg input b $cfmap :: forall (query :: * -> *) msg input a b. (a -> b) -> HalogenQ query msg input a -> HalogenQ query msg input b fmap :: forall a b. (a -> b) -> HalogenQ query msg input a -> HalogenQ query msg input b $c<$ :: forall (query :: * -> *) msg input a b. a -> HalogenQ query msg input b -> HalogenQ query msg input a <$ :: forall a b. a -> HalogenQ query msg input b -> HalogenQ query msg input a Functor) instance Bifunctor (HalogenQ query msg) where bimap :: forall a b c d. (a -> b) -> (c -> d) -> HalogenQ query msg a c -> HalogenQ query msg b d bimap a -> b f c -> d g = \case Initialize c a -> d -> HalogenQ query msg b d forall (query :: * -> *) msg input a. a -> HalogenQ query msg input a Initialize (c -> d g c a) Finalize c a -> d -> HalogenQ query msg b d forall (query :: * -> *) msg input a. a -> HalogenQ query msg input a Finalize (c -> d g c a) Receive a i c a -> b -> d -> HalogenQ query msg b d forall (query :: * -> *) msg input a. input -> a -> HalogenQ query msg input a Receive (a -> b f a i) (c -> d g c a) Action msg msg c a -> msg -> d -> HalogenQ query msg b d forall (query :: * -> *) msg input a. msg -> a -> HalogenQ query msg input a Action msg msg (c -> d g c a) Query Coyoneda query c y () -> c g' -> Coyoneda query d -> (() -> d) -> HalogenQ query msg b d forall (query :: * -> *) msg input a. Coyoneda query a -> (() -> a) -> HalogenQ query msg input a Query ((c -> d) -> Coyoneda query c -> Coyoneda query d forall a b. (a -> b) -> Coyoneda query a -> Coyoneda query b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap c -> d g Coyoneda query c y) (c -> d g (c -> d) -> (() -> c) -> () -> d forall b c a. (b -> c) -> (a -> b) -> a -> c . () -> c g')