Haskellを勉強して1週間ほどなので、馬鹿らしい質問かもしれませんがあらかじめ御了承ください。

Haskellの勉強中にふとラムダ式でパターンは使えるのかと思い、下のような関数を作りました

pow :: Num a => a -> Integer -> a
pow x = do
    \0  -> 1
    \1  -> x
    \2  -> x * x
    \n  -> 
        if even n   then pow (pow x 2) (n `div` 2)
        else             x * pow (pow x 2) ((n - 1) `div` 2)

しかし、これを実行するとコンパイルは通るのですが、無限ループになってしまっているようなのです。
なぜ、無限ループの陥ってしまうのかを教えていただきたいです。

開発環境はOS:Windows 10、コンパイラ:ghc 8.6.3です。