{- Copyright (C) 2011 Dr. Alistair Ward This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. -} {- | [@AUTHOR@] Dr. Alistair Ward [@DESCRIPTION@] <https://en.wikipedia.org/wiki/Fibonacci_number>. -} module Factory.Math.Fibonacci( -- * Constants fibonacci, primeIndexedFibonacci ) where import qualified Data.Numbers.Primes -- | A constant ordered list of the /Fibonacci/-numbers. fibonacci :: Integral i => [i] fibonacci :: [i] fibonacci = i 0 i -> [i] -> [i] forall a. a -> [a] -> [a] : (i -> i -> i) -> i -> [i] -> [i] forall b a. (b -> a -> b) -> b -> [a] -> [b] scanl i -> i -> i forall a. Num a => a -> a -> a (+) i 1 [i] forall i. Integral i => [i] fibonacci {- | * The subset of 'fibonacci', /indexed/ by a /prime/-number. * <https://primes.utm.edu/glossary/page.php?sort=FibonacciPrime>. -} primeIndexedFibonacci :: Integral i => [i] primeIndexedFibonacci :: [i] primeIndexedFibonacci = (Int -> i) -> [Int] -> [i] forall a b. (a -> b) -> [a] -> [b] map ([i] forall i. Integral i => [i] fibonacci [i] -> Int -> i forall a. [a] -> Int -> a !!) [Int] forall i. Integral i => [i] Data.Numbers.Primes.primes