algebra-4.3: src/Numeric/Domain/GCD.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Numeric.Domain.GCD (GCDDomain(..), gcd') where
import Data.List.NonEmpty
import Numeric.Domain.Internal(GCDDomain(..))
import Numeric.Algebra.Unital.UnitNormalForm
gcd' :: GCDDomain r => NonEmpty r -> r
gcd' (x :| []) = normalize x
gcd' (x :| [y]) = gcd x y
gcd' (x :| y:ys) = gcd x (gcd' (y:|ys))