我有一个JSON文档,看起来像:
{ "series": [[1,2], [2,3], [3,4]] }
Run Code Online (Sandbox Code Playgroud)
我想将其解析为一组数据类型:
data Series = Series [DataPoint]
data DataPoint = DataPoint Int Int -- x and y
Run Code Online (Sandbox Code Playgroud)
我在尝试FromJSON为DataPoint 编写实例时遇到了很多问题.
instance FromJSON DataPoint where
parseJSON (Array a) = ???
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用Lens来破坏DataPoint记录,但它不能编译:
case a ^.. values . _Integer of -}
[x,y] -> DataPoint <$> x <*> y
_ -> mzero
Run Code Online (Sandbox Code Playgroud)
这失败了这个错误(前两行甚至没有镜头技巧,只是试图创建一个DataPoint <$> 1 <*> 2):
Couldn't match type ‘aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser
Integer’
with ‘Integer’
Expected type: (aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser
Integer
-> Const
(Data.Monoid.Endo
[aeson-0.7.0.6:Data.Aeson.Types.Internal.Parse
(aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser I
-> …Run Code Online (Sandbox Code Playgroud) 这在所有处理程序中都会发生,但作为示例,我在vim中编辑了一个简单的处理程序:
getListingR :: Handler Html
getListingR = do
defaultLayout $ do
setTitle "Thing"
[whamlet|<p>Content|]
Run Code Online (Sandbox Code Playgroud)
yesod devel 启动服务器,有时服务于此.
但是,当我更改setTitle调用(甚至不是quasiquoter,只是文字字符串)时,服务器进程会识别更改,启动重新编译,并提供"等待重新编译"页面.
但完成后,它会回到提供旧内容.
我之前说'有时候',因为它似乎没有在新yesod devel发布时获得最新的变化.A cabal build似乎总能找到变化.
我正在运行GHC 7.10.1,在每晚锁定堆叠的cabal沙箱中.