Hello,
  I'm trying to solve Euler problem 104 with the solution "My Solution" below but it takes quite long time therefore I quite.
  Then I turn to haskell wiki for better solution which work well but I can not figure out why it is better than mine.
  I'm wondering whether more function call decrease the performance.

  Could you please help a little? 
  Thank you.

-- | My Solution 
main = print $ snd $ head $ dropWhile (\(x,y) -> (not . bothNinePandigit "123456789") x) (zip fibs [1..])

bothNinePandigit digits n = isFirstNinePandigit digits n && isLastNinePandigit digits n 

isLastNinePandigit  digits n = digits == sort (lastDigits 9 n) 
isFirstNinePandigit digits n = digits == sort (firstDigits 9 n)   

firstDigits k n = take k (show n)  
lastDigits  k n = show (n `mod` 10^k)

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

-- | From Haskell Wiki 
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
 
isFibPan n =
  let a = n `mod` 1000000000
      b = sort (show a)
      c = sort $ take 9 $ show n
  in  b == "123456789" && c == "123456789"
 
ex_104 = snd $ head $ dropWhile (\(x,y) -> (not . isFibPan) x) (zip fibs [1..])