> foo :: Double -> Double
> 
> foo x | x > 0  = log x   -- 正常な入力値
>       | x <= 0 = let userInput = *****  -- 不正な入力値なのでユーザから入力させる
>                  in log userInput

Double は Prelude で Read クラスのインスタンスであること
が宣言されていますので、以下のようになります。
(ユーザからの入力が数字じゃなかったときの例外処理は省略しますが、)

foo :: Double -> IO Double
foo x | x > 0     = return (log x)
      | otherwise = do userInput <- hGetLine stdin 
                       foo (read userInput)


--nobsun





--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/