Because:
(!!) :: [a] -> Int -> a

On Dec 17, 2017 5:50 AM, "Peter Normington" <peter@ireby.org.uk> wrote:
Why do I get an error in the following example:

memoized_fib :: Integer -> Integer
memoized_fib = (map fib [0 ..] !!)
  where fib 1 = 1
        fib 2 = 1
        fib n = memoized_fib (n-2) + memoized_fib (n-1)


but not in:

memoized_fib :: Int -> Integer
memoized_fib = (map fib [0 ..] !!)
  where fib 1 = 1
        fib 2 = 1
        fib n = memoized_fib (n-2) + memoized_fib (n-1)
?

The error is reported by GHCi as:

error:
    • Couldn't match type ‘Integer’ with ‘Int’
      Expected type: Integer -> Integer
        Actual type: Int -> Integer
    • In the expression: (map fib [0 .. ] !!)
      In an equation for ‘memoized_fib’:
          memoized_fib
            = (map fib [0 .. ] !!)
            where
                fib 1 = 1
                fib 2 = 1
                fib n = memoized_fib (n - 2) + memoized_fib (n - 1)
  |
2 | memoized_fib = (map fib [0 ..] !!)
  |                 ^^^^^^^^^^^^^^^^^
Failed, 0 modules loaded.


_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners