チートシート
getHogeR :: Handler Hoge
この場合、Hoge型が次の3つのclassのinstanceである必要があります。
- ToContent
- ToTypedContent
- Data.Aeson.ToJSON
JSONで受けたい型がData.Aeson.FromJSONのinstanceである必要がある。 またプロパティの扱いに注意が必要。Maybeで包んでいないプロパティは、JSON中に必ず存在しなければならない。
data Input = Input {
name :: Text
, optionName :: Maybe Text
}
ToJSON/FromJSON/Lensのinstance宣言は面倒なもの。これをショートカットする方法がある。
data Hoge = Hoge {
hogeAge :: Int
, hogeName :: Maybe Text
}
-- Lensify
makeLenses ''Hoge
-- JSONify
$(deriveJSON defaultOptions {
fieldLabelModifier = omittedFirstCharLower "_hoge"
} ''Hoge)