以下のHaskellコードはGHCで問題なくコンパイルされます。

f :: String -> MaybeT IO String
f x =
    MaybeT $ do
        s <- getLine
        case s of
         "y" ->
             pure . pure =<< getLine
         _ ->
             empty

実行するとemptyのケースのときエラーになってしまいます。

> runMaybeT $ f "a"
b
*** Exception: user error (mzero)

emptyのケースの型が間違っているので、そこを修正すれば動作します。

f :: String -> MaybeT IO String
f x =
    MaybeT $ do
        s <- getLine
        case s of
         "y" ->
             pure . pure =<< getLine
         _ ->
             pure empty

期待どおりになります。

> runMaybeT $ f "a"
b
Nothing

最初のコードを型エラーとしてコンパイル時にはじいてほしいのですが、どうして型チェックをすりぬけてしまうのでしょうか。
GHCに与えるオプションの調整が必要でしょうか。-Wallは付けています。

環境は以下です。

uname -v
Darwin Kernel Version 14.3.0: Mon Mar 23 11:59:05 PDT 2015; root:xnu-2782.20.48~5/RELEASE_X86_64
ghc -V
The Glorious Glasgow Haskell Compilation System, version 7.10.1


追記: importしているモジュールの定義による影響であるという指摘がありましたので、どれが該当するのか調べました

LibZip-0.11.1パッケージの

import Codec.Archive.LibZip

または ListLike-4.2.0パッケージの

import System.Process.ListLike

のいづれかの行を追加したときにコンパイルエラーにならず、実行時エラーになりました。
どちらもimportしなければ、期待どおりコンパイルエラーになります。

どちらでも発生するので、このモジュールそのものではなく、内部でimportしている別のモジュールが影響しているのだろうと思いましたが、それがどれなのかまでは僕のスキルでは特定できませんでした。