{-# 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))