小编csc*_*eid的帖子

用Haskell Aeson解析一个数组

我有一个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)

json haskell aeson

9
推荐指数
1
解决办法
3329
查看次数

yesod devel在更改后编译,但实际上并不反映更改

这在所有处理程序中都会发生,但作为示例,我在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沙箱中.

haskell yesod

8
推荐指数
0
解决办法
102
查看次数

标签 统计

haskell ×2

aeson ×1

json ×1

yesod ×1