Mercurial > hg > Members > atton > similar_monad
changeset 8:6e0285628ead
Define similer function
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 02 Sep 2014 11:27:49 +0900 |
parents | d30e40d5b5cf |
children | 41c71f67c103 |
files | similer.hs |
diffstat | 1 files changed, 12 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/similer.hs Tue Sep 02 11:07:10 2014 +0900 +++ b/similer.hs Tue Sep 02 11:27:49 2014 +0900 @@ -13,26 +13,23 @@ mu :: (Eq b) => Similer a (Similer b c) -> Similer b c mu (Similer a f b) = if (eq (f a) b) then b else undefined -double :: Int -> Similer Int Int -double x = Similer (2 * x) id (2 * x) +double :: Int -> Int +double x = (2 * x) -twicePlus :: Int -> Similer Int (Similer Int Int) -twicePlus x = Similer x double (Similer (x + x) id $ x + x) +twicePlus :: Int -> Int +twicePlus x = x + x -plusTwo :: Int -> Similer Int (Similer Int Int) -plusTwo x = Similer x double (Similer (x + 2) id (x + 2)) +plusTwo :: Int -> Int +plusTwo x = x + 2 same :: Eq b => Similer a b -> b same (Similer x f y) = if (f x) == y then y else undefined +similer :: Eq b => (a -> b) -> (a -> b) -> a -> b +similer f g x = same $ Similer x g (f x) + -- samples - -sameExample :: [Int] -sameExample = map same $ map (fmap same) $ fmap twicePlus [1..10] - -nonSameExample :: [Int] -nonSameExample = map same $ map (fmap same) $ fmap plusTwo [1..10] - -nonSameExampleSpecific :: [Int] -nonSameExampleSpecific = map same $ map (fmap same) $ fmap plusTwo [2] +sameExample = map (similer twicePlus double) [1..10] +nonSameExample = map (similer twicePlus plusTwo) [1..10] +nonSameExampleSpecific = map (similer twicePlus plusTwo) [2]