diff --git a/plailude.cabal b/plailude.cabal
--- a/plailude.cabal
+++ b/plailude.cabal
@@ -1,5 +1,5 @@
 name:                plailude
-version:             0.5.0
+version:             0.5.1
 synopsis:            plaimi's prelude
 description:         The prelude used internally at plaimi.
 
@@ -25,6 +25,7 @@
   other-modules:       Plailude.Control
                        Plailude.Control.Arrow
                        Plailude.Control.Bool
+                       Plailude.Control.IO
                        Plailude.Control.Monad
                        Plailude.Data.Text
                        Plailude.Data.Text.Show
diff --git a/src/Plailude/Control/IO.hs b/src/Plailude/Control/IO.hs
new file mode 100644
--- /dev/null
+++ b/src/Plailude/Control/IO.hs
@@ -0,0 +1,22 @@
+{- |
+Module      :  $Header$
+Description :  IO. dealwithit.jpeg.
+Copyright   :  (c) plaimi 2015
+License     :  GPL-3
+
+Maintainer  :  plailude@plaimi.net
+-} module Plailude.Control.IO where
+
+import System.Posix.IO
+  (
+  stdInput,
+  )
+import System.Posix.Terminal
+  (
+  queryTerminal,
+  )
+
+infixr 9 ~+~
+(~+~) :: IO a -> IO a -> IO a
+-- | Query the terminal for STDIN. If there is any, do lhs -- if not, do rhs.
+l ~+~ r = queryTerminal stdInput >>= \i -> if i then l else r
