Open
Description
Using Data.JSString.pack
gives incorrect results. For example:
import Data.JSString (pack)
main :: IO ()
main = print $ pack $ fst $ foldr (select (== 'a')) ([], []) "ababababa" -- "a"
where
-- taken from Data.OldList
select p x ~(ts, fs) | p x = (x:ts, fs )
| otherwise = (ts , x:fs)
Outputs "a", and it should output "aaaaa". But if we remove the ~
for irrefutable patterns, we get correct results:
import Data.JSString (pack)
main :: IO ()
main = print $ pack $ fst $ foldr (select (== 'a')) ([], []) "ababababa" -- "aaaaa"
where
-- taken from Data.OldList
select p x (ts, fs) | p x = (x:ts, fs )
| otherwise = (ts , x:fs)
I believe this issue has something to do with GHCJS packing the lazy String too early, before the fold is complete.
Metadata
Metadata
Assignees
Labels
No labels
Activity
luite commentedon Mar 25, 2020
I think this may be a bug related to the handling of selector thunks. It looks like they're not always correctly updated