
Hey, I am trying to write a netwire combiner similar to multicast. The only difference is that when one of the wires inihibts, I want to remove it from the list. So this is my attempt: manager :: (Monad m) => [Wire e m a b] -> Wire e m [a] [b] manager ws' = mkGen $ \dt xs' -> do res <- mapM (\(w,x) -> stepWire w dt x) $ zip ws' xs' let filt (Left a, b) = Just (a, b) filt _ = Nothing resx = mapMaybe filt res return (Left $ (fmap fst) resx,manager (fmap snd resx)) ghc gives this compiler error: BreakoutImproved.hs:90:62: Couldn't match type `e' with `[e]' `e' is a rigid type variable bound by the type signature for manager :: Monad m => [Wire e m a b] -> Wire e m [a] [b] at BreakoutImproved.hs:85:1 Expected type: [(e, Wire [e] m a b)] Actual type: [(e, Wire e m a b)] In the second argument of `fmap', namely `resx' In the first argument of `manager', namely `(fmap snd resx)' Now this, I do not get. Why does manager expect an argument of type [(e, Wire [e] m a b)]. The type signature clearly says [(e, Wire e m a b)] (which is what it is getting). Thanks! Nathan