Принудительно показать запись в PureScript

Можно ли принудительно отобразить (т. е. создать строковое представление) произвольную запись в PureScript для целей отладки независимо от того, имеет ли она экземпляр класса типов для Show?

Я хотел бы показать содержимое события Pux, но у него нет экземпляра Show:

  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
                   }

person Sridhar Ratnakumar    schedule 10.11.2016    source источник


Ответы (2)


Вы можете использовать purescript-debug.

person Phil Freeman    schedule 10.11.2016
comment
Спасибо, Фил. Самый короткий способ распечатать запись {a:1}: traceAny {a:1} id? - person levant pied; 16.02.2017
comment
Текущая версия: `trace {a: 1} identity - person Mathieu François; 04.07.2018

Вы можете обернуть запись в newtype и использовать Data.Generic для получения экземпляра для нее:

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

Теперь вы можете использовать show для MyRecord или show <<< MyRecord для записи.

person soupi    schedule 10.11.2016