changeset 85:a1723b3ea997

Mini refactors
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Mon, 05 Jan 2015 13:53:21 +0900
parents 8c7bd8bf8092
children 5c083ddd73ed
files delta.hs
diffstat 1 files changed, 8 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/delta.hs	Sun Jan 04 17:32:01 2015 +0900
+++ b/delta.hs	Mon Jan 05 13:53:21 2015 +0900
@@ -2,7 +2,7 @@
 import Control.Monad.Writer
 import Data.Numbers.Primes -- $ cabal install primes
 
--- delta definition
+-- Delta definition
 
 data Delta a = Mono a | Delta a (Delta a) deriving Show
 
@@ -86,7 +86,9 @@
         sortedValueR = replicate (length $ filter (== maximumValue) xs) maximumValue
         remainValue  = filter (/= maximumValue) xs
 
--- DeltaM Definition (Delta with Monad)
+
+
+-- DeltaM definition (Delta with Monad)
 
 data DeltaM m a = DeltaM (Delta (m a)) deriving (Show)
 
@@ -141,8 +143,7 @@
                return x
 
 dmap :: (m a -> b) -> DeltaM m a -> Delta b
-dmap f (DeltaM (Mono mx))   = (Mono $ f mx)
-dmap f (DeltaM (Delta x d)) = Delta (f x) (dmap f (DeltaM d))
+dmap f (DeltaM d) = fmap f d
 
 
 -- example : prime filter
@@ -150,8 +151,8 @@
 --         : dmap runWriter $ primeCountM 30          -- run all version
 
 generatorM :: Int -> DeltaWithLog [Int]
-generatorM x = let intList = returnW [1..x] in
-                             DeltaM $ deltaFromList $  [intList, intList]
+generatorM x = let intList = [1..x] in
+                             DeltaM $ deltaFromList $ fmap returnW $ replicate 2 intList
 
 primeFilterM :: [Int] -> DeltaWithLog [Int]
 primeFilterM xs = let primeList    = filter isPrime xs
@@ -161,7 +162,7 @@
 
 countM :: [Int] -> DeltaWithLog Int
 countM xs = let primeCount = length xs in
-                DeltaM $ deltaFromList $ fmap returnW [primeCount, primeCount]
+                DeltaM $ deltaFromList $ fmap returnW $ replicate 2 primeCount
 
 primeCountM :: Int -> DeltaWithLog Int
 primeCountM x = generatorM x >>= primeFilterM >>= countM