translateTerOp :: VirtualSegmentAlgebra a
               => VSL.TerOp
               -> Res (VSLDVec a) (VSLRVec a)
               -> Res (VSLDVec a) (VSLRVec a)
               -> Res (VSLDVec a) (VSLRVec a)
               -> B.Build a (Res (VSLDVec a) (VSLRVec a))
translateTerOp t c1 c2 c3 =
    case t of
        VSL.Combine -> do
            (d, r1, r2) <- vecCombine (toDVec c1) (toDVec c2) (toDVec c3)
            return $ RTriple (fromDVec d) (fromRVec r1) (fromRVec r2)
translateTerOp :: VirtualSegmentAlgebra a
               => VSL.TerOp
               -> Res (VSLDVec a) (VSLRVec a)
               -> Res (VSLDVec a) (VSLRVec a)
               -> Res (VSLDVec a) (VSLRVec a)
               -> B.Build a (Res (VSLDVec a) (VSLRVec a))
translateTerOp t c1 c2 c3 =
    case t of
        VSL.Combine -> do
            (d, r1, r2) <- vecCombine (toDVec c1) (toDVec c2) (toDVec c3)
            return $ RTriple (fromDVec d) (fromRVec r1) (fromRVec r2)
translateTerOp t c1 c2 c3 =
    case t of
        VSL.Combine -> do
            (d, r1, r2) <- vecCombine (toDVec c1) (toDVec c2) (toDVec c3)
            return $ RTriple (fromDVec d) (fromRVec r1) (fromRVec r2)