@@ -232,9 +232,21 @@ not =
232232
233233count :: (Columnable a ) => Expr a -> Expr Int
234234count = Agg (MergeAgg " count" (0 :: Int ) (\ c _ -> c + 1 ) (+) id )
235+ {-# SPECIALIZE count :: Expr Double -> Expr Int #-}
236+ {-# SPECIALIZE count :: Expr Float -> Expr Int #-}
237+ {-# SPECIALIZE count :: Expr Int -> Expr Int #-}
238+ {-# SPECIALIZE count :: Expr Int8 -> Expr Int #-}
239+ {-# SPECIALIZE count :: Expr Int16 -> Expr Int #-}
240+ {-# SPECIALIZE count :: Expr Int32 -> Expr Int #-}
241+ {-# SPECIALIZE count :: Expr Int64 -> Expr Int #-}
242+ {-# INLINEABLE count #-}
235243
236244collect :: (Columnable a ) => Expr a -> Expr [a ]
237245collect = Agg (FoldAgg " collect" (Just [] ) (flip (:) ))
246+ {-# SPECIALIZE collect :: Expr Double -> Expr [Double] #-}
247+ {-# SPECIALIZE collect :: Expr Float -> Expr [Float] #-}
248+ {-# SPECIALIZE collect :: Expr Int -> Expr [Int] #-}
249+ {-# INLINEABLE collect #-}
238250
239251mode :: (Ord a , Columnable a , Eq a ) => Expr a -> Expr a
240252mode =
@@ -247,21 +259,58 @@ mode =
247259 . V. foldl' (\ m e -> M. insertWith (+) e 1 m) M. empty
248260 )
249261 )
262+ {-# SPECIALIZE mode :: Expr Double -> Expr Double #-}
263+ {-# SPECIALIZE mode :: Expr Float -> Expr Float #-}
264+ {-# SPECIALIZE mode :: Expr Int -> Expr Int #-}
265+ {-# SPECIALIZE mode :: Expr Int8 -> Expr Int8 #-}
266+ {-# SPECIALIZE mode :: Expr Int16 -> Expr Int16 #-}
267+ {-# SPECIALIZE mode :: Expr Int32 -> Expr Int32 #-}
268+ {-# SPECIALIZE mode :: Expr Int64 -> Expr Int64 #-}
269+ {-# INLINEABLE mode #-}
250270
251271minimum :: (Columnable a , Ord a ) => Expr a -> Expr a
252272minimum = Agg (FoldAgg " minimum" Nothing Prelude. min )
273+ {-# SPECIALIZE DataFrame.Functions.minimum :: Expr Double -> Expr Double #-}
274+ {-# SPECIALIZE DataFrame.Functions.minimum :: Expr Float -> Expr Float #-}
275+ {-# SPECIALIZE DataFrame.Functions.minimum :: Expr Int -> Expr Int #-}
276+ {-# SPECIALIZE DataFrame.Functions.minimum :: Expr Int8 -> Expr Int8 #-}
277+ {-# SPECIALIZE DataFrame.Functions.minimum :: Expr Int16 -> Expr Int16 #-}
278+ {-# SPECIALIZE DataFrame.Functions.minimum :: Expr Int32 -> Expr Int32 #-}
279+ {-# SPECIALIZE DataFrame.Functions.minimum :: Expr Int64 -> Expr Int64 #-}
280+ {-# INLINEABLE DataFrame.Functions.minimum #-}
253281
254282maximum :: (Columnable a , Ord a ) => Expr a -> Expr a
255283maximum = Agg (FoldAgg " maximum" Nothing Prelude. max )
284+ {-# SPECIALIZE DataFrame.Functions.maximum :: Expr Double -> Expr Double #-}
285+ {-# SPECIALIZE DataFrame.Functions.maximum :: Expr Float -> Expr Float #-}
286+ {-# SPECIALIZE DataFrame.Functions.maximum :: Expr Int -> Expr Int #-}
287+ {-# SPECIALIZE DataFrame.Functions.maximum :: Expr Int8 -> Expr Int8 #-}
288+ {-# SPECIALIZE DataFrame.Functions.maximum :: Expr Int16 -> Expr Int16 #-}
289+ {-# SPECIALIZE DataFrame.Functions.maximum :: Expr Int32 -> Expr Int32 #-}
290+ {-# SPECIALIZE DataFrame.Functions.maximum :: Expr Int64 -> Expr Int64 #-}
291+ {-# INLINEABLE DataFrame.Functions.maximum #-}
256292
257293sum :: forall a . (Columnable a , Num a ) => Expr a -> Expr a
258294sum = Agg (FoldAgg " sum" Nothing (+) )
259295{-# SPECIALIZE DataFrame.Functions.sum :: Expr Double -> Expr Double #-}
296+ {-# SPECIALIZE DataFrame.Functions.sum :: Expr Float -> Expr Float #-}
260297{-# SPECIALIZE DataFrame.Functions.sum :: Expr Int -> Expr Int #-}
298+ {-# SPECIALIZE DataFrame.Functions.sum :: Expr Int8 -> Expr Int8 #-}
299+ {-# SPECIALIZE DataFrame.Functions.sum :: Expr Int16 -> Expr Int16 #-}
300+ {-# SPECIALIZE DataFrame.Functions.sum :: Expr Int32 -> Expr Int32 #-}
301+ {-# SPECIALIZE DataFrame.Functions.sum :: Expr Int64 -> Expr Int64 #-}
261302{-# INLINEABLE DataFrame.Functions.sum #-}
262303
263304sumMaybe :: forall a . (Columnable a , Num a ) => Expr (Maybe a ) -> Expr a
264305sumMaybe = Agg (CollectAgg " sumMaybe" (P. sum . Maybe. catMaybes . V. toList))
306+ {-# SPECIALIZE sumMaybe :: Expr (Maybe Double) -> Expr Double #-}
307+ {-# SPECIALIZE sumMaybe :: Expr (Maybe Float) -> Expr Float #-}
308+ {-# SPECIALIZE sumMaybe :: Expr (Maybe Int) -> Expr Int #-}
309+ {-# SPECIALIZE sumMaybe :: Expr (Maybe Int8) -> Expr Int8 #-}
310+ {-# SPECIALIZE sumMaybe :: Expr (Maybe Int16) -> Expr Int16 #-}
311+ {-# SPECIALIZE sumMaybe :: Expr (Maybe Int32) -> Expr Int32 #-}
312+ {-# SPECIALIZE sumMaybe :: Expr (Maybe Int64) -> Expr Int64 #-}
313+ {-# INLINEABLE sumMaybe #-}
265314
266315mean :: (Columnable a , Real a ) => Expr a -> Expr Double
267316mean =
@@ -273,18 +322,58 @@ mean =
273322 (\ (MeanAcc s1 c1) (MeanAcc s2 c2) -> MeanAcc (s1 + s2) (c1 + c2))
274323 (\ (MeanAcc s c) -> if c == 0 then 0 / 0 else s / fromIntegral c)
275324 )
325+ {-# SPECIALIZE mean :: Expr Double -> Expr Double #-}
326+ {-# SPECIALIZE mean :: Expr Float -> Expr Double #-}
327+ {-# SPECIALIZE mean :: Expr Int -> Expr Double #-}
328+ {-# SPECIALIZE mean :: Expr Int8 -> Expr Double #-}
329+ {-# SPECIALIZE mean :: Expr Int16 -> Expr Double #-}
330+ {-# SPECIALIZE mean :: Expr Int32 -> Expr Double #-}
331+ {-# SPECIALIZE mean :: Expr Int64 -> Expr Double #-}
332+ {-# INLINEABLE mean #-}
276333
277334meanMaybe :: forall a . (Columnable a , Real a ) => Expr (Maybe a ) -> Expr Double
278335meanMaybe = Agg (CollectAgg " meanMaybe" (mean' . optionalToDoubleVector))
336+ {-# SPECIALIZE meanMaybe :: Expr (Maybe Double) -> Expr Double #-}
337+ {-# SPECIALIZE meanMaybe :: Expr (Maybe Float) -> Expr Double #-}
338+ {-# SPECIALIZE meanMaybe :: Expr (Maybe Int) -> Expr Double #-}
339+ {-# SPECIALIZE meanMaybe :: Expr (Maybe Int8) -> Expr Double #-}
340+ {-# SPECIALIZE meanMaybe :: Expr (Maybe Int16) -> Expr Double #-}
341+ {-# SPECIALIZE meanMaybe :: Expr (Maybe Int32) -> Expr Double #-}
342+ {-# SPECIALIZE meanMaybe :: Expr (Maybe Int64) -> Expr Double #-}
343+ {-# INLINEABLE meanMaybe #-}
279344
280345variance :: (Columnable a , Real a , VU. Unbox a ) => Expr a -> Expr Double
281346variance = Agg (CollectAgg " variance" variance')
347+ {-# SPECIALIZE variance :: Expr Double -> Expr Double #-}
348+ {-# SPECIALIZE variance :: Expr Float -> Expr Double #-}
349+ {-# SPECIALIZE variance :: Expr Int -> Expr Double #-}
350+ {-# SPECIALIZE variance :: Expr Int8 -> Expr Double #-}
351+ {-# SPECIALIZE variance :: Expr Int16 -> Expr Double #-}
352+ {-# SPECIALIZE variance :: Expr Int32 -> Expr Double #-}
353+ {-# SPECIALIZE variance :: Expr Int64 -> Expr Double #-}
354+ {-# INLINEABLE variance #-}
282355
283356median :: (Columnable a , Real a , VU. Unbox a ) => Expr a -> Expr Double
284357median = Agg (CollectAgg " median" median')
358+ {-# SPECIALIZE median :: Expr Double -> Expr Double #-}
359+ {-# SPECIALIZE median :: Expr Float -> Expr Double #-}
360+ {-# SPECIALIZE median :: Expr Int -> Expr Double #-}
361+ {-# SPECIALIZE median :: Expr Int8 -> Expr Double #-}
362+ {-# SPECIALIZE median :: Expr Int16 -> Expr Double #-}
363+ {-# SPECIALIZE median :: Expr Int32 -> Expr Double #-}
364+ {-# SPECIALIZE median :: Expr Int64 -> Expr Double #-}
365+ {-# INLINEABLE median #-}
285366
286367medianMaybe :: (Columnable a , Real a ) => Expr (Maybe a ) -> Expr Double
287368medianMaybe = Agg (CollectAgg " meanMaybe" (median' . optionalToDoubleVector))
369+ {-# SPECIALIZE medianMaybe :: Expr (Maybe Double) -> Expr Double #-}
370+ {-# SPECIALIZE medianMaybe :: Expr (Maybe Float) -> Expr Double #-}
371+ {-# SPECIALIZE medianMaybe :: Expr (Maybe Int) -> Expr Double #-}
372+ {-# SPECIALIZE medianMaybe :: Expr (Maybe Int8) -> Expr Double #-}
373+ {-# SPECIALIZE medianMaybe :: Expr (Maybe Int16) -> Expr Double #-}
374+ {-# SPECIALIZE medianMaybe :: Expr (Maybe Int32) -> Expr Double #-}
375+ {-# SPECIALIZE medianMaybe :: Expr (Maybe Int64) -> Expr Double #-}
376+ {-# INLINEABLE medianMaybe #-}
288377
289378optionalToDoubleVector :: (Real a ) => V. Vector (Maybe a ) -> VU. Vector Double
290379optionalToDoubleVector =
@@ -303,55 +392,115 @@ percentile n =
303392
304393stddev :: (Columnable a , Real a , VU. Unbox a ) => Expr a -> Expr Double
305394stddev = Agg (CollectAgg " stddev" (sqrt . variance'))
395+ {-# SPECIALIZE stddev :: Expr Double -> Expr Double #-}
396+ {-# SPECIALIZE stddev :: Expr Float -> Expr Double #-}
397+ {-# SPECIALIZE stddev :: Expr Int -> Expr Double #-}
398+ {-# SPECIALIZE stddev :: Expr Int8 -> Expr Double #-}
399+ {-# SPECIALIZE stddev :: Expr Int16 -> Expr Double #-}
400+ {-# SPECIALIZE stddev :: Expr Int32 -> Expr Double #-}
401+ {-# SPECIALIZE stddev :: Expr Int64 -> Expr Double #-}
402+ {-# INLINEABLE stddev #-}
306403
307404stddevMaybe :: forall a . (Columnable a , Real a ) => Expr (Maybe a ) -> Expr Double
308405stddevMaybe = Agg (CollectAgg " stddevMaybe" (sqrt . variance' . optionalToDoubleVector))
406+ {-# SPECIALIZE stddevMaybe :: Expr (Maybe Double) -> Expr Double #-}
407+ {-# SPECIALIZE stddevMaybe :: Expr (Maybe Float) -> Expr Double #-}
408+ {-# SPECIALIZE stddevMaybe :: Expr (Maybe Int) -> Expr Double #-}
409+ {-# SPECIALIZE stddevMaybe :: Expr (Maybe Int8) -> Expr Double #-}
410+ {-# SPECIALIZE stddevMaybe :: Expr (Maybe Int16) -> Expr Double #-}
411+ {-# SPECIALIZE stddevMaybe :: Expr (Maybe Int32) -> Expr Double #-}
412+ {-# SPECIALIZE stddevMaybe :: Expr (Maybe Int64) -> Expr Double #-}
413+ {-# INLINEABLE stddevMaybe #-}
309414
310415zScore :: Expr Double -> Expr Double
311416zScore c = (c - mean c) / stddev c
312417
313418pow :: (Columnable a , Num a ) => Expr a -> Int -> Expr a
314419pow expr i = lift2Decorated (^) " pow" (Just " ^" ) True 8 expr (Lit i)
420+ {-# SPECIALIZE pow :: Expr Double -> Int -> Expr Double #-}
421+ {-# SPECIALIZE pow :: Expr Float -> Int -> Expr Float #-}
422+ {-# SPECIALIZE pow :: Expr Int -> Int -> Expr Int #-}
423+ {-# INLINEABLE pow #-}
315424
316425relu :: (Columnable a , Num a , Ord a ) => Expr a -> Expr a
317426relu = liftDecorated (Prelude. max 0 ) " relu" Nothing
427+ {-# SPECIALIZE relu :: Expr Double -> Expr Double #-}
428+ {-# SPECIALIZE relu :: Expr Float -> Expr Float #-}
429+ {-# SPECIALIZE relu :: Expr Int -> Expr Int #-}
430+ {-# INLINEABLE relu #-}
318431
319432min :: (Columnable a , Ord a ) => Expr a -> Expr a -> Expr a
320433min = lift2Decorated Prelude. min " min" Nothing True 1
434+ {-# SPECIALIZE DataFrame.Functions.min ::
435+ Expr Double -> Expr Double -> Expr Double
436+ #-}
437+ {-# SPECIALIZE DataFrame.Functions.min ::
438+ Expr Float -> Expr Float -> Expr Float
439+ #-}
440+ {-# SPECIALIZE DataFrame.Functions.min :: Expr Int -> Expr Int -> Expr Int #-}
441+ {-# INLINEABLE DataFrame.Functions.min #-}
321442
322443max :: (Columnable a , Ord a ) => Expr a -> Expr a -> Expr a
323444max = lift2Decorated Prelude. max " max" Nothing True 1
445+ {-# SPECIALIZE DataFrame.Functions.max ::
446+ Expr Double -> Expr Double -> Expr Double
447+ #-}
448+ {-# SPECIALIZE DataFrame.Functions.max ::
449+ Expr Float -> Expr Float -> Expr Float
450+ #-}
451+ {-# SPECIALIZE DataFrame.Functions.max :: Expr Int -> Expr Int -> Expr Int #-}
452+ {-# INLINEABLE DataFrame.Functions.max #-}
324453
325454reduce ::
326455 forall a b .
327456 (Columnable a , Columnable b ) => Expr b -> a -> (a -> b -> a ) -> Expr a
328457reduce expr start f = Agg (FoldAgg " foldUdf" (Just start) f) expr
458+ {-# INLINEABLE reduce #-}
329459
330460toMaybe :: (Columnable a ) => Expr a -> Expr (Maybe a )
331461toMaybe = liftDecorated Just " toMaybe" Nothing
462+ {-# SPECIALIZE toMaybe :: Expr Double -> Expr (Maybe Double) #-}
463+ {-# SPECIALIZE toMaybe :: Expr Float -> Expr (Maybe Float) #-}
464+ {-# SPECIALIZE toMaybe :: Expr Int -> Expr (Maybe Int) #-}
465+ {-# INLINEABLE toMaybe #-}
332466
333467fromMaybe :: (Columnable a ) => a -> Expr (Maybe a ) -> Expr a
334468fromMaybe d = liftDecorated (Maybe. fromMaybe d) " fromMaybe" Nothing
469+ {-# SPECIALIZE fromMaybe :: Double -> Expr (Maybe Double) -> Expr Double #-}
470+ {-# SPECIALIZE fromMaybe :: Float -> Expr (Maybe Float) -> Expr Float #-}
471+ {-# SPECIALIZE fromMaybe :: Int -> Expr (Maybe Int) -> Expr Int #-}
472+ {-# INLINEABLE fromMaybe #-}
335473
336474isJust :: (Columnable a ) => Expr (Maybe a ) -> Expr Bool
337475isJust = liftDecorated Maybe. isJust " isJust" Nothing
476+ {-# SPECIALIZE isJust :: Expr (Maybe Double) -> Expr Bool #-}
477+ {-# SPECIALIZE isJust :: Expr (Maybe Int) -> Expr Bool #-}
478+ {-# INLINEABLE isJust #-}
338479
339480isNothing :: (Columnable a ) => Expr (Maybe a ) -> Expr Bool
340481isNothing = liftDecorated Maybe. isNothing " isNothing" Nothing
482+ {-# SPECIALIZE isNothing :: Expr (Maybe Double) -> Expr Bool #-}
483+ {-# SPECIALIZE isNothing :: Expr (Maybe Int) -> Expr Bool #-}
484+ {-# INLINEABLE isNothing #-}
341485
342486fromJust :: (Columnable a ) => Expr (Maybe a ) -> Expr a
343487fromJust = liftDecorated Maybe. fromJust " fromJust" Nothing
488+ {-# SPECIALIZE fromJust :: Expr (Maybe Double) -> Expr Double #-}
489+ {-# SPECIALIZE fromJust :: Expr (Maybe Int) -> Expr Int #-}
490+ {-# INLINEABLE fromJust #-}
344491
345492whenPresent ::
346493 forall a b .
347494 (Columnable a , Columnable b ) => (a -> b ) -> Expr (Maybe a ) -> Expr (Maybe b )
348495whenPresent f = liftDecorated (fmap f) " whenPresent" Nothing
496+ {-# INLINEABLE whenPresent #-}
349497
350498whenBothPresent ::
351499 forall a b c .
352500 (Columnable a , Columnable b , Columnable c ) =>
353501 (a -> b -> c ) -> Expr (Maybe a ) -> Expr (Maybe b ) -> Expr (Maybe c )
354502whenBothPresent f = lift2Decorated (\ l r -> f <$> l <*> r) " whenBothPresent" Nothing False 0
503+ {-# INLINEABLE whenBothPresent #-}
355504
356505recode ::
357506 forall a b .
0 commit comments