13 lines
395 B
Haskell
13 lines
395 B
Haskell
instance Monoid Elliptic where
|
|
mempty = Zero
|
|
|
|
mappend Zero p = p
|
|
mappend p Zero = p
|
|
mappend p@(Elliptic x1 y1) q@(Elliptic x2 y2)
|
|
| p == inv q = Zero
|
|
| p == q = mkElliptic $ 3*x1^2/(2*y1)
|
|
| otherwise = mkElliptic $ (y2 - y1)/(x2 - x1)
|
|
where
|
|
mkElliptic l = let x = l^2 - x1 - x2
|
|
y = l*(x1 - x) - y1
|
|
in Elliptic x y
|