Skip to content

Instantly share code, notes, and snippets.

@chessai
Created November 14, 2018 20:14
Show Gist options
  • Save chessai/25e6b8841dfe1eadb401623ffcf81b52 to your computer and use it in GitHub Desktop.
Save chessai/25e6b8841dfe1eadb401623ffcf81b52 to your computer and use it in GitHub Desktop.
newtype Branch (o :: OS) e m a = Branch (ExceptT e m a)
deriving
( Applicative, Eq, Foldable, Functor, Monad, Traversable
)
branchToExceptT :: Branch o e m a -> ExceptT e m a
branchToExceptT = coerce
data Branches e m a = Branches
{ _branchPulseSecure :: Branch 'PulseSecure e m a
, _branchJUNOS :: Branch 'JUNOS e m a
, _branchPaloAlto :: Branch 'PaloAlto e m a
, _branchArubaOS :: Branch 'ArubaOS e m a
, _branchAvayaNortel :: Branch 'AvayaNortel e m a
, _branchAvayaERS :: Branch 'AvayaERS e m a
, _branchAvayaVSP9000 :: Branch 'AvayaVSP9000 e m a
, _branchBrocadeVDX :: Branch 'BrocadeVDX e m a
, _branchBrocadeMLX :: Branch 'BrocadeMLX e m a
, _branchBrocadeICX :: Branch 'BrocadeICX e m a
, _branchBrocadeCER :: Branch 'BrocadeCER e m a
, _branchCisco :: Branch 'Cisco e m a
, _branchF5 :: Branch 'F5 e m a
, _branchUnrecognised :: Branch 'Unrecognised e m a
}
branch :: (Monad m)
=> ([a] -> b)
-> Branches e m a
-> ExceptT e m b
branch fun br = do
let a = branchToExceptT (_branchPulseSecure br)
let b = branchToExceptT (_branchJUNOS br)
let c = branchToExceptT (_branchPaloAlto br)
let d = branchToExceptT (_branchArubaOS br)
let e = branchToExceptT (_branchAvayaNortel br)
let f = branchToExceptT (_branchAvayaERS br)
let g = branchToExceptT (_branchAvayaVSP9000 br)
let h = branchToExceptT (_branchBrocadeVDX br)
let i = branchToExceptT (_branchBrocadeMLX br)
let j = branchToExceptT (_branchBrocadeICX br)
let k = branchToExceptT (_branchBrocadeCER br)
let l = branchToExceptT (_branchCisco br)
let m = branchToExceptT (_branchF5 br)
let n = branchToExceptT (_branchUnrecognised br)
a' <- a; b' <- b; c' <- c; d' <- d; e' <- e;
f' <- f; g' <- g; h' <- h; i' <- i; j' <- j;
k' <- k; l' <- l; m' <- m; n' <- n;
let res = fun [a', b', c', d', e', f', g', h', i', j', k', l', m', n']
pure res
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment