purescript-contrib/purescript-react

error when pattern matching on props

coot opened this issue · 2 comments

coot commented

Consider a react class:

data Message
  = Hello
  | Bye

instance showMessage :: Show Message where
  show Hello = "Hello :)"
  show Bye = "Bye!"

cls :: ReactClass Message
cls = createClass (spec unit renderFn)
  where
    renderFn this = do
      msg <- getProps this
      pure $ div' [ text (show msg) ]

When rendering it PureScript will fail to pattern match on Hello and Bye and will error.

index.js:34228 Uncaught Error: Failed pattern match at Main line 24, column 1 - line 24, column 37: Object

screenshot from 2017-07-14 19-14-32

coot commented

There are two possible workarounds for this:

  • ask the user to wrap the type inside a record.
  • we do that for him for props the same way it is done for state already

I prefer the second choice as it will support all the language features out of the box, but this adds some runtime overhead (creating the wrapper objects & gc them after they become unreferenced).

ethul commented

As of #129, props are now records. I believe the above should not longer be an issue.