ニュートン法で平方根を求める

ニュートン法で平方根を求める-数学アルゴリズム演習ノート-を参考にニュートン法平方根を求めるプログラムを書いてみました。do {...} whileのループが、head $ dropWhileになりました。

module Main (main) where

sqr :: Double -> Double
sqr c = 
  let x = head $ dropWhile (\ x -> x * x < c) [1.0, 2.0 ..]
  in foldr (\ _ x -> (x + c / x) / 2.0) x [1 .. 10]

main :: IO ()
main = do
  print $ sqr 2.0 -- => 1.414213562373095
  print $ sqr 3.0 -- => 1.7320508075688772
  print $ sqr 4.0 -- => 2.0