
Looking at the source code comments it seems that you're right: data HsBang = HsUserBang -- The user's source-code request (Maybe Bool) -- Just True {-# UNPACK #-} -- Just False {-# NOUNPACK #-} -- Nothing no pragma Bool -- True <=> '!' specified Can anyone confirm? Janek Dnia niedziela, 30 listopada 2014, Alan & Kim Zimmerman napisaĆ:
If I look at the production for strict_mark in the parser
https://github.com/ghc/ghc/blob/master/compiler/parser/Parser.y#L1355
strict_mark :: { Located ([AddAnn],HsBang) }
: '!' { sL1 $1 ([],HsUserBang Nothing
True) }
| '{-# UNPACK' '#-}' { sLL $1 $> ([mo $1,mc $2],HsUserBang
(Just True) False) }
| '{-# NOUNPACK' '#-}' { sLL $1 $> ([mo $1,mc $2],HsUserBang
(Just False) True) } -- ***Correct?
| '{-# UNPACK' '#-}' '!' { sLL $1 $> ([mo $1,mc $2],HsUserBang
(Just True) True) }
| '{-# NOUNPACK' '#-}' '!' { sLL $1 $> ([mo $1,mc $2],HsUserBang
(Just False) True) }
I would expect the final True or False value to reflect the presence of the '!' mark.
But the second line has no '!' but returns True.
I suspect this is an error.
Alan