Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force show a record in PureScript

Is it possible to force-show (i.e., create a string representation) an arbitrary record in PureScript for debugging purpose regardless of it having a type-class instance for Show?

I would like to show the contents of the Pux Event object but it does not have a Show instance:

  No type class instance was found for

    Data.Show.Show { target :: { value :: String
                               , checked :: Boolean
                               }
                   , currentTarget :: { value :: String
                                      , checked :: Boolean
                                      }
                   , altKey :: Boolean
                   , button :: Number
                   , buttons :: Number
                   , clientX :: Number
                   , clientY :: Number
                   , ctrlKey :: Boolean
                   , metaKey :: Boolean
                   , pageX :: Number
                   , pageY :: Number
                   , screenX :: Number
                   , screenY :: Number
                   , shiftKey :: Boolean
                   }
like image 786
Sridhar Ratnakumar Avatar asked Nov 10 '16 15:11

Sridhar Ratnakumar


2 Answers

You can use purescript-debug.

like image 91
Phil Freeman Avatar answered Oct 14 '22 23:10

Phil Freeman


You can wrap a record in a newtype and use Data.Generic to derive the instance for it:

import Data.Generic

newtype MyRecord = MyRecord
                   { target :: { value :: String
                               , checked :: Boolean
                               }
                   , currentTarget :: { value :: String
                                      , checked :: Boolean
                                      }
                   , altKey :: Boolean
                   , button :: Number
                   , buttons :: Number
                   , clientX :: Number
                   , clientY :: Number
                   , ctrlKey :: Boolean
                   , metaKey :: Boolean
                   , pageX :: Number
                   , pageY :: Number
                   , screenX :: Number
                   , screenY :: Number
                   , shiftKey :: Boolean
                   }


derive instance genericMyRecord :: Generic MyRecord

instance showMyRecord :: Show MyRecord where
    show = gShow

Now you can use show on MyRecord or show <<< MyRecord on the record.

like image 39
soupi Avatar answered Oct 14 '22 23:10

soupi