{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE BangPatterns #-}
import Data.Foldable
data Stream a
= forall s
. Stream
(s
-> Maybe (a
, s
)) s
instance Foldable Stream where
foldr k z
(Stream sf s
) = go
(sf s
) where
go Nothing = z
go (Just (e, ns)) = e `k` go (sf ns)
n :: Int
n = 100000000
x1 = [1..n]
x2 = Stream (\s -> if (s == n + 1) then Nothing else Just (s, s + 1)) 1
bestcase :: Int
bestcase = go 1 0 where
go i c = if i == n then c + i else go (i+1) (c+i)
--main = print $ bestcase
--main = print $ mysum x1
--main = print $ mysum x2
ey0jIExBTkdVQUdFIEV4aXN0ZW50aWFsUXVhbnRpZmljYXRpb24gIy19CnstIyBMQU5HVUFHRSBOb01vbm9tb3JwaGlzbVJlc3RyaWN0aW9uICMtfQp7LSMgTEFOR1VBR0UgQmFuZ1BhdHRlcm5zICMtfQoKaW1wb3J0IERhdGEuRm9sZGFibGUKCmRhdGEgU3RyZWFtIGEgPSBmb3JhbGwgcy4gU3RyZWFtIChzIC0+IE1heWJlIChhLCBzKSkgcwoKaW5zdGFuY2UgRm9sZGFibGUgU3RyZWFtIHdoZXJlCiAgZm9sZHIgayB6IChTdHJlYW0gc2YgcykgPSBnbyAoc2YgcykKICAgIHdoZXJlCiAgICAgIGdvIE5vdGhpbmcgPSB6CiAgICAgIGdvIChKdXN0IChlLCBucykpID0gZSBga2AgZ28gKHNmIG5zKQoKbXlzdW0gPSBmb2xkbCcgKCspIDAKCm4gOjogSW50Cm4gPSAxMDAwMDAwMDAKCngxID0gWzEuLm5dCngyID0gU3RyZWFtIChccyAtPiBpZiAocyA9PSBuICsgMSkgdGhlbiBOb3RoaW5nIGVsc2UgSnVzdCAocywgcyArIDEpKSAxCgpiZXN0Y2FzZSA6OiBJbnQKYmVzdGNhc2UgPSBnbyAxIDAgd2hlcmUKICBnbyBpIGMgPSBpZiBpID09IG4gdGhlbiBjICsgaSBlbHNlIGdvIChpKzEpIChjK2kpCgotLW1haW4gPSBwcmludCAkIGJlc3RjYXNlCi0tbWFpbiA9IHByaW50ICQgbXlzdW0geDEKLS1tYWluID0gcHJpbnQgJCBteXN1bSB4Mgo=