Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Show PatternSet throws undefined #37

Closed
andreasabel opened this issue Jul 14, 2022 · 0 comments · Fixed by #38
Closed

Show PatternSet throws undefined #37

andreasabel opened this issue Jul 14, 2022 · 0 comments · Fixed by #38
Assignees
Labels
bug Something isn't working
Milestone

Comments

@andreasabel
Copy link
Member

undefined in a Show instance, congratulations!

$ cabal repl

ghci> :m +Text.Regex.TDFA.ReadRegex

ghci> parseRegex "[[:digit:]]"

Right (POr [PConcat [PAny {getDoPa = #1, getPatternSet = "*** Exception: Prelude.undefined
CallStack (from HasCallStack):
  error, called at libraries/base/GHC/Err.hs:74:14 in base:GHC.Err
  undefined, called at lib/Text/Regex/TDFA/Pattern.hs:110:23 in regex-tdfa-1.3.1.2-inplace:Text.Regex.TDFA.Pattern

instance Show PatternSet where
showsPrec i (PatternSet s scc sce sec) =
let (special,normal) = maybe ("","") ((partition (`elem` "]-")) . Set.toAscList) s
charSpec = (if ']' `elem` special then (']':) else id) (byRange normal)
scc' = maybe "" ((concatMap show) . Set.toList) scc
sce' = maybe "" ((concatMap show) . Set.toList) sce
sec' = maybe "" ((concatMap show) . Set.toList) sec
in shows charSpec
. showsPrec i scc' . showsPrec i sce' . showsPrec i sec'
. if '-' `elem` special then showChar '-' else id
where byRange xAll@(x:xs) | length xAll <=3 = xAll
| otherwise = groupRange x 1 xs
byRange _ = undefined

THOU SHALT NOT ABUSE THE Show CLASS!
Show is to print the HASKELL representation of data, not anything nice for the user!

How is one to explore a package if it tampers with Show, esp. in a way that crashes?

@andreasabel andreasabel added the bug Something isn't working label Jul 14, 2022
@andreasabel andreasabel self-assigned this Jul 14, 2022
@andreasabel andreasabel added this to the 1.3.1.3 milestone Jul 14, 2022
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Aug 18, 2022
### 1.3.2

_2022-07-18, Andreas Abel_

- Export `decodePatternSet` and `decodeCharacterClass` from `Text.Regex.TDFA.Pattern`
  ([#16](haskell-hvr/regex-tdfa#16))
- Extend and correct docs for `Pattern` module
- Tested with GHC 7.4 - 9.4

### 1.3.1.5

_2022-07-18, Andreas Abel_

- Allow dash (`-`) as start of a range, e.g. `[--z]`
  ([#1](haskell-hvr/regex-tdfa#1),
  [#45](haskell-hvr/regex-tdfa#45))
- Tested with GHC 7.4 - 9.4

### 1.3.1.4

_2022-07-17, Andreas Abel_

- Fix parsing of dashes in bracket expressions, e.g. `[-a-z]` ([#1](haskell-hvr/regex-tdfa#1))
- Fix a deprecation warning except for on GHC 8.2 ([#21](haskell-hvr/regex-tdfa#21))
- Documentation: link `defaultComptOpt` to its definition  ([#13](haskell-hvr/regex-tdfa#13))
- Verify documentation examples with new `doc-test` testsuite
- Tested with GHC 7.4 - 9.4

### 1.3.1.3

_2022-07-14, Andreas Abel_

- Fix an `undefined` in `Show PatternSet` ([#37](haskell-hvr/regex-tdfa#37))
- Document POSIX character classes (e.g. `[[:digit:]]`) in README
- Tested with GHC 7.4 - 9.4

### 1.3.1.2 Revision 1

_2022-05-25, Andreas Abel_

- Allow `base >= 4.17` (GHC 9.4)

### 1.3.1.2

_2022-02-19, Andreas Abel_
- No longer rely on the `MonadFail` instance for `ST`
  (future `base` library change, see [#29](haskell-hvr/regex-tdfa#29)).
- Silence warning `incomplete-uni-patterns` (GHC >= 9.2).
- Import from `Data.List` explicitly or qualified (warning `compat-unqualified-imports`).
- Import from `Control.Monad` to allow `mtl-2.3` in its `rc3` incarnation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant