teakI :: Chan -> Chan -> MkPNMonad SimFlow SimValue ()
    teakI ((inpR, inpA), _) (_, (outR, outA)) = withLabel "I" $ do
        reqPlace <- withLabel "r" $ newBlackPlace [token]
        withLabel "ir" $ newTrans [inpR, outA] [reqPlace, inpA] [PNInput 0, PNLiteral token]
        withLabel "or" $ newTrans [reqPlace] [outR] [PNLiteral token]
        return ()
teakI :: Chan -> Chan -> MkPNMonad SimFlow SimValue ()
teakI ((inpR, inpA), _) (_, (outR, outA)) = withLabel "I" $ do
        reqPlace <- withLabel "r" $ newBlackPlace [token]
        withLabel "ir" $ newTrans [inpR, outA] [reqPlace, inpA] [PNInput 0, PNLiteral token]
        withLabel "or" $ newTrans [reqPlace] [outR] [PNLiteral token]
        return ()
teakI ((inpR, inpA), _) (_, (outR, outA)) = withLabel "I" $ do
        reqPlace <- withLabel "r" $ newBlackPlace [token]
        withLabel "ir" $ newTrans [inpR, outA] [reqPlace, inpA] [PNInput 0, PNLiteral token]
        withLabel "or" $ newTrans [reqPlace] [outR] [PNLiteral token]
        return ()