Я анализирую стороннюю структуру JSON в свой собственный набор типов. Я хотел бы проанализировать наиболее эффективным способом (я анализирую данные, отправленные через сокет Unix с Network.Socket)
Документация Aeson утверждает, что синтаксический анализ с toEncoding приводит к ускорению в 3 раза по сравнению с toJSON, однако я не понимаю, как написать действительный экземпляр, используя toEncoding для моего простого типа суммы.
например:
data NodeLayout =
SplitHorizontalLayout
| SplitVerticalLayout
| StackedLayout
| TabbedLayout
| DockAreaLayout
| OutputLayout
deriving (Eq, Generic)
instance ToJSON NodeLayout where
toJSON = \case
SplitHorizontalLayout -> "splith"
SplitVerticalLayout -> "splitv"
StackedLayout -> "stacked"
TabbedLayout -> "tabbed"
DockAreaLayout -> "dockarea"
OutputLayout -> "output"
instance FromJSON NodeLayout where
parseJSON (String s) = pure $ case s of
"splith" -> SplitHorizontalLayout
"splitv" -> SplitVerticalLayout
"stacked" -> StackedLayout
"tabbed" -> TabbedLayout
"dockarea" -> DockAreaLayout
"output" -> OutputLayout
_ -> error "Received unrecognized NodeLayout"
parseJSON _ = error "Error parsing NodeLayout"
У меня есть другие типы данных, которые получат Векторы этого, но иногда я получаю одно значение, которое нужно анализировать индивидуально. Как эффективно разбить строки на типы сумм, используя toEncoding?