'No instance for (Show (Double -> Double))

I have the following code which uses Newton's method to approximate the square root of some number. The problems is that when I run it, I get an error..What is wrong and how can I fix it?

newtonRootSequence :: Double -> [Double]
newtonRootSequence d = newtonSequenceGenerator d 1

newtonSequenceGenerator :: Double -> Double -> [Double]
newtonSequenceGenerator d xn = nxplus1 : newtonSequenceGenerator d nxplus1
    where nxplus1 =  (xn + d / xn) / 2

newtonRoot:: Double -> Double -> Double
newtonRoot d epsilon = head ([xs !! index | index <- [1..((length xs) - 1)], (xs !! index) - (xs !! index - 1) <= epsilon]
    where xs = newtonRootSequence d

Error:

 <interactive>:2:1: error:
        * No instance for (Show (Double -> Double))
            arising from a use of `print'
            (maybe you haven't applied a function to enough arguments?)
        * In a stmt of an interactive GHCi command: print it

Running it should be like the following:

$newtonRoot 35



Solution 1:[1]

In Haskell all function are curryfied, so, your function

newtonRoot:: Double -> Double -> Double

the are "hidden parenthesis":

newtonRoot:: Double -> (Double -> Double)

if you provide one argument newtonRoot 35 you have

(newtonRoot 35) :: Double -> Double

and a function f :: Double -> Double is not instance of Show type class

You need to finally provide the last argument to your function value:

(newtonRoot 35 2) :: Double

Double can me shown

Solution 2:[2]

newtonRoot takes two arguments, a d and an epsilon. You didn't supply an epsilon. Try

> newtonRoot 35 0.1

instead.

There are other errors, too, but this should get you started down the debugging path.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Daniel Wagner