hw6: implement instance of Fractional for Stream Integer
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 22 Dec 2014 16:19:14 +0000 (21:49 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 22 Dec 2014 16:19:14 +0000 (21:49 +0530)
hw6/Fibonacci.hs

index 9a1571253b8f1487ce2a6146a994e7c26d5e22a8..e7b3f591e86a5e301ac7407c457dacbade725796 100644 (file)
@@ -2,6 +2,7 @@
 {-# OPTIONS_GHC -fno-warn-missing-methods #-}
 {-# LANGUAGE InstanceSigs #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE FlexibleContexts #-}
 module Fibonacci where
 
 -- exercise 1
@@ -86,3 +87,9 @@ instance Num (Stream Integer) where
   (+) (Cons x sx) (Cons y sy) = (Cons (x+y) ((+) sx sy))
   (*) :: Stream Integer -> Stream Integer -> Stream Integer
   (*) (Cons x sx) (Cons y sy) = Cons (x*y) ((streamMap (* x) sy) + sx*(Cons x sx))
+
+instance Fractional Integer => Fractional (Stream Integer) where
+  (/) :: Stream Integer -> Stream Integer -> Stream Integer
+  (/) (Cons x xs) (Cons y ys) = let r = streamMap (/ y) $ Cons x ((xs - r*ys))
+                                in
+                                  r