Fibonacci calculator in Haskell I'm just starting to look into Haskell. I've written a naive Fibonacci implementation, and I've also written a more advanced one that uses tail-call recursion for efficiency.

module Fibonacci where

import System.Environment

fibonacci :: Integer -&gt; Integer
fibonacci 0 = 0
fibonacci 1 = 1
fibonacci n
    | n &lt; 0 = error "Cannot find a negative fibonacci number"
    | otherwise = fibonacci (n - 1) + fibonacci (n - 2)

fibonacci' :: Integer -&gt; Integer
fibonacci' n
    | n &lt; 0 = error "Cannot find a negative fibonacci number"
    | otherwise = fibHelper n 0 1
    where
        fibHelper :: Integer -&gt; Integer -&gt; Integer -&gt; Integer
        fibHelper n a b
            | n == 0 = a
            | otherwise = fibHelper (n - 1) b (a + b)

firstNumberFrom :: [String] -&gt; Integer
firstNumberFrom [] = 10
firstNumberFrom args = read $ args !! 0

main = do
    args &lt;- getArgs
    let num = firstNumberFrom args in
        putStrLn $ show (fibonacci' num)


I'd appreciate any reviews on correctness and idiomatic usage.
The many approaches in main and firstNumberFrom can be unified:

main = print . fibonacci' . maybe 10 read . listToMaybe =&lt;&lt; getArgs


The explicit recursion in fibbonacci' is captured by iterate:

fibbonacci' n = fst $ iterate (\(a,b) -&gt; (b, a+b)) (0,1) !! n