Last active
September 18, 2021 22:59
-
-
Save pete-murphy/46ecd922c6e7dad16ff633a9b56f6ff7 to your computer and use it in GitHub Desktop.
alaF and foldMap
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| module Main where | |
| import Prelude | |
| import Data.Foldable (foldMap, sum) | |
| import Data.List (List) | |
| import Data.List.Lazy (replicate, toUnfoldable) | |
| import Data.Monoid.Additive (Additive(..)) | |
| import Data.Newtype (alaF) | |
| import Data.Rational (Ratio, (%)) | |
| import Data.Tuple (Tuple(..), uncurry) | |
| import Effect (Effect) | |
| import Effect.Class.Console as Console | |
| newtype RatioInt = RatioInt (Ratio Int) | |
| derive newtype instance Semiring RatioInt | |
| derive newtype instance Show RatioInt | |
| foldTuples :: List (Tuple Int Int) -> RatioInt | |
| foldTuples = foldMap `alaF Additive` (RatioInt <<< uncurry (%)) | |
| foldTuples' :: List (Tuple Int Int) -> RatioInt | |
| foldTuples' = sum <<< map (RatioInt <<< uncurry (%)) | |
| main :: Effect Unit | |
| main = do | |
| let | |
| tuples = toUnfoldable (replicate 1_000_000 (Tuple 1 2)) | |
| Console.time "a" | |
| Console.logShow (foldTuples tuples) | |
| Console.timeEnd "a" | |
| Console.time "b" | |
| Console.logShow (foldTuples' tuples) | |
| Console.timeEnd "b" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment