Is it possible to force-show (ie, 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
}
你可以使用purescript-debug
。
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.