Skip to content

Commit

Permalink
Add some NOINLINEs to generic derived functions
Browse files Browse the repository at this point in the history
  • Loading branch information
TeofilC committed Oct 18, 2024
1 parent c482564 commit 5aae4fe
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/Rel8/Generic/Rel8able.hs
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ class HTable (GColumns t) => Rel8able t where
type GColumns t = G.GColumns TColumns (GRep t Expr)
type GFromExprs t = t Result

{-# NOINLINE gfromColumns #-} -- See Note [Generics and Inlining]
default gfromColumns :: forall context.
( SRel8able t Expr
, forall table. SRel8able t (Field table)
Expand All @@ -181,6 +182,7 @@ class HTable (GColumns t) => Rel8able t where
SName -> sfromColumns
SResult -> sfromResult

{-# NOINLINE gtoColumns #-} -- See Note [Generics and Inlining]
default gtoColumns :: forall context.
( SRel8able t Expr
, forall table. SRel8able t (Field table)
Expand All @@ -194,10 +196,12 @@ class HTable (GColumns t) => Rel8able t where
SName -> stoColumns
SResult -> stoResult

{-# NOINLINE gfromResult #-} -- See Note [Generics and Inlining]
default gfromResult :: (SSerialize t, GFromExprs t ~ t Result)
=> GColumns t Result -> GFromExprs t
gfromResult = sfromResult

{-# NOINLINE gtoResult #-} -- See Note [Generics and Inlining]
default gtoResult :: (SSerialize t, GFromExprs t ~ t Result)
=> GFromExprs t -> GColumns t Result
gtoResult = stoResult
Expand Down Expand Up @@ -274,3 +278,11 @@ stoResult =
(\(_ :: proxy x) -> serialize @_ @x) .
from .
Record

-- Note [Generics and Inlining]
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- We want to make sure that Generics derived functions (by default)
-- do not expose their unfoldings. These are always unoptimised code and can
-- therefore be quite large, and bloat our interfaces.
-- By marking these as NOINLINE we can considerably speed up our compile times.
-- If users do want these INLINEd, they can locally override the default using a pragma.

0 comments on commit 5aae4fe

Please sign in to comment.