I took a look. Your ATS code looks very fine to me. I did some profiling on my own. In my trials, your ATS code is actually a lot faster than the Haskell code you posted. Note that my ghc version is very old: GHC 7.10.3
###### ATS ###### (* Your code using non-linear stream *) hwxi@hongwei-t440p:/tmp$ patscc -O2 -o primes -DATS_MEMALLOC_LIBC primes.dats hwxi@hongwei-t440p:/tmp$ time ./primes 1077871 real 0m3.118s user 0m3.064s sys 0m0.048s ###### Haskell ###### (* Your haskell version *) (* Glasgow Haskell Compiler, Version 7.10.3, stage 2 booted by GHC version 7.10.3 *) hwxi@hongwei-t440p:/tmp$ ghc -O2 primes.hs Linking primes ... hwxi@hongwei-t440p:/tmp$ time ./primes 1077871 real 0m8.195s user 0m8.152s sys 0m0.040s ################ ###### ATS ###### (*My version using linear stream that is based on yours*) hwxi@hongwei-t440p:/tmp$ patscc -O2 -o primes2 -DATS_MEMALLOC_LIBC primes2.dats hwxi@hongwei-t440p:/tmp$ time ./primes2 1077871 real 0m2.120s user 0m2.092s sys 0m0.000s On Saturday, July 9, 2022 at 12:50:11 PM UTC-4 [email protected] wrote: > My initial motivation was this Haskell source code: > https://github.com/dambaev/mobt2/blob/master/haskell/app/Main.hs which is > using lazy list (of course) and recursive binding and I decided to check if > it will be possible to get something similar > > ATS version using non-linear stream is here: > https://github.com/dambaev/mobt2/blob/master/ats2/src/TEST/test1.dats , > but it takes to much memory as `stream_take_while` duplicates data, as I > have got, that datatype constructor can't be unfolded with `@stream_cons` > pattern match > > There is another version, that generates primes with non-linear stream and > then, converting it to linear stream > https://github.com/dambaev/mobt2/blob/master/ats2/src/TEST/test3.dats . > This is the closest version to haskell's one. but still is using more space > and as twice as slow as Haskell, so I had started to think of how to > eliminate intermediate data structure. > > So, not a production issue, hehe, just found an interesting topic to dig > in :) > > сб, 9 июл. 2022 г. в 11:11, Hongwei Xi <[email protected]>: > >> By looking at your first version, my simple answer is that a linear >> stream cannot be used >> in this way. The second version is possible but I am not sure what you >> wanted to do exactly. >> If you show me how to use a non-linear stream to do it, then I could >> probably say more. >> >> On Sat, Jul 9, 2022 at 5:26 AM Dambaev Alexander <[email protected]> >> wrote: >> >>> Hi, >>> >>> I had tried to implement function of type: >>> >>> ``` >>> fun >>> {a:t0p} >>> isPrime >>> ( xs: !stream_vt( int) >>> , x: int >>> ):<cloptr1> >>> bool >>> ``` >>> >>> Ie, I want to force evaluation of some portion of a stream, but I need >>> to preserve it for a later use. >>> >>> I had tried to make a similar version: >>> ``` >>> fun >>> {a:t0p} >>> isPrime >>> ( xs: stream_vt( int) >>> , x: int >>> ):<cloptr1> >>> ( stream_vt( int), bool) >>> ``` >>> >>> but failed as well, so I decided to ask for a direction if someone had >>> tried to do similar stuff >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "ats-lang-users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/ats-lang-users/CAHjn2KwFq7JH%2BiZE7bWCJ_L7oZ38K-kmGBFii7DZsdxWLDsGmg%40mail.gmail.com >>> >>> <https://groups.google.com/d/msgid/ats-lang-users/CAHjn2KwFq7JH%2BiZE7bWCJ_L7oZ38K-kmGBFii7DZsdxWLDsGmg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "ats-lang-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLqp62MaoG8hugJ8h2mUt%2BsSAJ2eu6uRuJ%3D5nMOc4EbcfQ%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLqp62MaoG8hugJ8h2mUt%2BsSAJ2eu6uRuJ%3D5nMOc4EbcfQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "ats-lang-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/70a43cb2-4f67-414a-b8b0-1a9cef9a5537n%40googlegroups.com.
