[GHC] #15358: no way to talk about unpacking sum types / unpacking tuples
GHC
ghc-devs at haskell.org
Tue Jul 10 19:30:31 UTC 2018
#15358: no way to talk about unpacking sum types / unpacking tuples
-------------------------------------+-------------------------------------
Reporter: chessai | Owner: (none)
Type: feature | Status: new
request |
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.4.3
Keywords: unboxedsums, | Operating System: Unknown/Multiple
unboxedtuples |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Suppose I have the following Haskell module:
{{{#!hs
{-# LANGUAGE BangPatterns #-}
-- strict 'Maybe'
data StrictMaybe a = SNothing | SJust !a
-- lazy 'Maybe'
data Maybe a = Nothing | Just a
data BoxedInner = BoxedInner
!Int
!(Maybe Int)
data StillBoxedInner = StillBoxedInner
!Int
!(StrictMaybe Int)
mBoxed :: BoxedInner
mBoxed = BoxedInner 0 (Just 0)
mWantThisToUnbox :: StillBoxedInner
mWantThisToUnbox = StillBoxedInner 1 (Just 1)
}}}
the 'StrictMaybe' can unbox the first 'Int' into 1#, but the 1 inside of
the just cannot unbox. When compiled to core with -O2 what I'd want to see
is something like:
{{{#!hs
mWantThisToUnbox = StillBoxedInner 0# (# | 1# #)
}}}
(where (# (# #) | a #) is an unboxed sum type with two constructors, one
nullary and one unary)
but instead the Int inside 'SJust' remains boxed.
Even with something like the following:
{{{#!hs
{-# LANGUAGE UnboxedSums #-}
data UMaybe a = (# (# #) | a #)
}}}
something like 'UMaybe Int' would still result in 'Int' being boxed.
This same thing occurs with unpacked tuples, consider something like:
{{{#!hs
data StrictTuple = StrictTuple
!Int
!(Int, Int)
}}}
Anything inside the (Int, Int) tuple will not unbox, despite having a bang
pattern there.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15358>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list