{-# OPTIONS_GHC -Wno-orphans #-}

module Data.Function.FastMemo.Ratio () where

import Data.Function.FastMemo.Class (Memoizable (..))
import Data.Ratio (Ratio, denominator, numerator, (%))

instance (Integral a, Memoizable a) => Memoizable (Ratio a) where
  memoize :: forall b. (Ratio a -> b) -> Ratio a -> b
memoize Ratio a -> b
f = forall a b. Memoizable a => (a -> b) -> a -> b
memoize (Ratio a -> b
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a. Integral a => a -> a -> Ratio a
(%)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\Ratio a
x -> (forall a. Ratio a -> a
numerator Ratio a
x, forall a. Ratio a -> a
denominator Ratio a
x))