在 PureScript 中强制显示记录

Force show a record in PureScript

是否可以强制显示(即创建字符串表示)PureScript 中的任意记录以进行调试,而不管它是否具有 Show 的类型 class 实例?

我想显示 Pux Event 对象的内容,但它没有 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
                   }

您可以将记录包装在 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

现在您可以在 MyRecordshow <<< MyRecord 上使用 show 记录。

您可以使用 purescript-debug.