packages feed

fastmemo-0.1.0.0: test/Examples.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}

module Examples where

import Data.Function.FastMemo (Memoizable, memoize)
import Data.Word (Word8)
import GHC.Generics (Generic)
import Numeric.Natural (Natural)

data Color = Color {red :: Word8, green :: Word8, blue :: Word8}
  deriving (Generic, Memoizable)

data Tree a = Leaf a | Node (Tree a) (Tree a)
  deriving (Generic, Memoizable)

fibonacci :: Natural -> Natural
fibonacci = memoize $ \i -> case i of
  0 -> 0
  1 -> 1
  _ -> fibonacci (i - 1) + fibonacci (i - 2)