-- (an expression for) the literal value itself
dsOverLit (HsIntegral _ lit) = dsExpr lit
dsOverLit (HsFractional _ lit) = dsExpr lit
+dsOverLit (HsIsString _ lit) = dsExpr lit
\end{code}
\begin{code}
hsOverLitKey (HsIntegral i _) True = MachInt (-i)
hsOverLitKey (HsFractional r _) False = MachFloat r
hsOverLitKey (HsFractional r _) True = MachFloat (-r)
+hsOverLitKey (HsIsString s _) False = MachStr s
+-- negated string should never happen
\end{code}
%************************************************************************
| isIntTy lit_ty = mk_con_pat intDataCon (HsIntPrim int_val)
| isFloatTy lit_ty = mk_con_pat floatDataCon (HsFloatPrim rat_val)
| isDoubleTy lit_ty = mk_con_pat doubleDataCon (HsDoublePrim rat_val)
+-- | isStringTy lit_ty = mk_con_pat stringDataCon (HsStringPrim str_val)
| otherwise = NPat over_lit mb_neg eq lit_ty
where
mk_con_pat :: DataCon -> HsLit -> Pat Id
rat_val = case neg_lit of
HsIntegral i _ -> fromInteger i
HsFractional f _ -> f
+
+ str_val :: FastString
+ str_val = case neg_lit of
+ HsIsString s _ -> s
+ _ -> error "tidyNPat"
\end{code}