{- |A monadic style +++ that adds the result of f input to input.
-}

{- |Similar to +++> except that it can apply any function, rather than just f +++

    So it applies a function to the first argument, and returns another CornerPoint based on that.

    Eg: Transpose a [CornerPoints] upwards in order to create a new layer of [CornerPoints]-}  
(@+++#@) :: CornerPoints -> (CornerPoints -> CornerPoints) -> CornerPoints
(BottomFace b1 f1 b4 f4) @+++#@ f = (BottomFace b1 f1 b4 f4) +++ (f (BottomFace b1 f1 b4 f4))
(@+++#@) :: CornerPoints -> (CornerPoints -> CornerPoints) -> CornerPoints
(BottomFace b1 f1 b4 f4) @+++#@ f = (BottomFace b1 f1 b4 f4) +++ (f (BottomFace b1 f1 b4 f4))
(BottomFace b1 f1 b4 f4) @+++#@ f = (BottomFace b1 f1 b4 f4) +++ (f (BottomFace b1 f1 b4 f4))