itive"


--Task 2

--Тривиално рекурсивно изчисление на n-тото число на Фибоначи.
--Integral класът се включва в Ord, значи няма нужда да пишем (Ord a, Integral a)

fib :: (Integral a) => a -> a
fib n = if (n < 2)
        then n
        else (fib (n-1)) + (fib (n-2))

--Изчисление с помощна функция, която дефинираме локално с where дефиниция (също индентирана)

fib' :: (Integral a) => a -> a
fib' n
  | n < 0 = 0
  | otherwise = fibHelper 0 1 startIdx
  where fibHelper f1 f2 i
          | i == n = f1
          | otherwise = fibHelper f2 (f1+f2) (i+1)
        startIdx = 0


--Pattern matching - разписваме граничните случаи
saySign :: (Num a, Ord a) => a -> String
saySign x
  | x < 0     = "Negative"
  | x == 0    = "Zero"
  | otherwise = "Positive"
saySign x
  | x < 0     = "Negative"
  | x == 0    = "Zero"
  | otherwise = "Positive"