diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,8 +3,12 @@
 `shellmet` uses [PVP Versioning][1].
 The changelog is available [on GitHub][2].
 
-0.0.0
-=====
+## 0.0.1 — Apr 9, 2019
+
+* Generalise the type of the `$?` operator to allow returning values on
+  shell-command failuires.
+
+## 0.0.0
 
 * Initially created.
 
diff --git a/shellmet.cabal b/shellmet.cabal
--- a/shellmet.cabal
+++ b/shellmet.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.0
 name:                shellmet
-version:             0.0.0
+version:             0.0.1
 synopsis:            Out of the shell solution for scripting in Haskell
 description:         Shellmet provides easy and convenient way to call shell commands from Haskell programs
 homepage:            https://github.com/kowainik/shellmet
diff --git a/src/Shellmet.hs b/src/Shellmet.hs
--- a/src/Shellmet.hs
+++ b/src/Shellmet.hs
@@ -56,7 +56,7 @@
 ($|) :: FilePath -> [Text] -> IO Text
 cmd $| args = T.strip . T.pack <$> readProcess cmd (map T.unpack args) ""
 
-{- | Do some IO actions when processed failed with error.
+{- | Do some IO actions when process failed with 'IOError'.
 
 >>> "exit" ["0"] $? putStrLn "Command failed"
 ⚙  exit 0
@@ -66,5 +66,5 @@
 Command failed
 -}
 infixl 4 $?
-($?) :: IO () -> IO () -> IO ()
+($?) :: IO a -> IO a -> IO a
 action $? handler = action `catch` \(_ :: IOError) -> handler
