{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE GADTs #-}
module Downhill.Internal.Graph.Types
(
BackFun(..), FwdFun(..),
flipBackFun, flipFwdFun
)
where
import Downhill.Linear.Expr (BasicVector (VecBuilder))
newtype BackFun u v = BackFun {BackFun u v -> v -> VecBuilder u
unBackFun :: v -> VecBuilder u}
newtype FwdFun u v = FwdFun {FwdFun u v -> u -> VecBuilder v
unFwdFun :: u -> VecBuilder v}
flipBackFun :: BackFun u v -> FwdFun v u
flipBackFun :: BackFun u v -> FwdFun v u
flipBackFun (BackFun v -> VecBuilder u
f) = (v -> VecBuilder u) -> FwdFun v u
forall u v. (u -> VecBuilder v) -> FwdFun u v
FwdFun v -> VecBuilder u
f
flipFwdFun :: FwdFun u v -> BackFun v u
flipFwdFun :: FwdFun u v -> BackFun v u
flipFwdFun (FwdFun u -> VecBuilder v
f) = (u -> VecBuilder v) -> BackFun v u
forall u v. (v -> VecBuilder u) -> BackFun u v
BackFun u -> VecBuilder v
f