@@ -878,15 +878,32 @@ foreignCallHelper = \case
878
878
evaluate $ Map. fromList l
879
879
Map_eq -> mkForeign $ \ (l :: Map Val Val , r :: Map Val Val ) ->
880
880
pure $ l == r
881
+ Map_union -> mkForeign $ \ (l :: Map Val Val , r :: Map Val Val ) ->
882
+ evaluate $ Map. union l r
883
+ Map_intersect -> mkForeign $ \ (l :: Map Val Val , r :: Map Val Val ) ->
884
+ evaluate $ Map. intersection l r
885
+ Map_toList -> mkForeign $ \ (m :: Map Val Val ) ->
886
+ evaluate . forceListSpine $ Map. toList m
881
887
List_range -> mkForeign $ \ (m :: Word64 , n :: Word64 ) ->
882
888
let sz
883
889
| m < n = fromIntegral $ n - m
884
890
| otherwise = 0
885
891
mk i = NatVal $ m + fromIntegral i
886
- force s = foldl (\ u x -> x `seq` u) s s
887
- in evaluate . force $ Sq. fromFunction sz mk
892
+ in evaluate . forceListSpine $ Sq. fromFunction sz mk
888
893
List_sort -> mkForeign $ \ (l :: Seq Val ) -> pure $ Sq. unstableSort l
894
+ Multimap_fromList -> mkForeign $ \ (l :: [(Val , Val )]) -> do
895
+ let listVals = l <&> \ (k, v) -> (k, Sq. singleton v)
896
+ evaluate $ Map. fromListWith (<>) listVals
897
+ Set_fromList -> mkForeign $ \ (l :: [Val ]) -> do
898
+ evaluate $ Map. fromList $ zip l (repeat () )
899
+ Set_union -> mkForeign $ \ (l :: Map Val () , r :: Map Val () ) ->
900
+ evaluate $ Map. union l r
901
+ Set_intersect -> mkForeign $ \ (l :: Map Val () , r :: Map Val () ) ->
902
+ evaluate $ Map. intersection l r
903
+ Set_toList -> mkForeign $ \ (s :: Map Val () ) ->
904
+ evaluate . forceListSpine $ Map. keys s
889
905
where
906
+ forceListSpine xs = foldl (\ u x -> x `seq` u) xs xs
890
907
chop = reverse . dropWhile isPathSeparator . reverse
891
908
892
909
hostPreference :: Maybe Util.Text. Text -> SYS. HostPreference
@@ -2083,6 +2100,30 @@ functionReplacementList =
2083
2100
( " 005mc1fq7ojq72c238qlm2rspjgqo2furjodf28icruv316odu6du" ,
2084
2101
Map_fromList
2085
2102
),
2103
+ ( " 01qqpul0ttlgjhr5i2gtmdr2uarns2hbtnjpipmk1575ipkrlug42" ,
2104
+ Map_union
2105
+ ),
2106
+ ( " 00c363e340il8q0fai6peiv3586o931nojj98qfek09hg1tjkm9ma" ,
2107
+ Map_intersect
2108
+ ),
2109
+ ( " 03pjq0jijrr7ebf6s3tuqi4d5hi5mrv19nagp7ql2j9ltm55c32ek" ,
2110
+ Map_toList
2111
+ ),
2112
+ ( " 03putoun7i5n0lhf8iu990u9p08laklnp668i170dka2itckmadlq" ,
2113
+ Multimap_fromList
2114
+ ),
2115
+ ( " 03q6giac0qlva6u4mja29tr7mv0jqnsugk8paibatdrns8lhqqb92" ,
2116
+ Set_fromList
2117
+ ),
2118
+ ( " 03362vaalqq28lcrmmsjhha637is312j01jme3juj980ugd93up28" ,
2119
+ Set_union
2120
+ ),
2121
+ ( " 01lm6ejo31na1ti6u85bv0klliefll7q0c0da2qnefvcrq1l8rlqe" ,
2122
+ Set_intersect
2123
+ ),
2124
+ ( " 01p7ot36tg62na408mnk1psve6rc7fog30gv6n7thkrv6t3na2gdm" ,
2125
+ Set_toList
2126
+ ),
2086
2127
( " 03c559iihi2vj0qps6cln48nv31ajup2srhas4pd05b9k46ds8jvk" ,
2087
2128
Map_eq
2088
2129
),
0 commit comments