There's a theory this should work: getContents >>= lines >>> map read >>> sum >>> print But unfortunately we have: `(>>=)' [infixl 1] `(>>>)' [infixr 1] Meaning we must write: getContents >>= (lines >>> map read >>> sum >>> print) Indeed, all Arrow ops are infixr. Are there any technical/compelling reasons for this? -- Don