4
Q
在Haskell
A
回答
11
你需要創建一個FromJSON
實例(注意,FromJSON
作爲YAML從Aeson庫導出這就是所謂的),如Data.Yaml
documentation描述。
類似的問題與埃宋以前討論here而哈斯克爾YAML庫的選擇進行了討論here
下面是該YAML文件轉換成[MyUser]
最小工作示例:
{-# LANGUAGE OverloadedStrings #-}
import Data.Yaml
import Control.Applicative -- <$>, <*>
import Data.Maybe (fromJust)
import qualified Data.ByteString.Char8 as BS
data MyUser = MyUser {id :: Int,
name :: String,
reputation :: Int}
deriving (Show)
instance FromJSON MyUser where
parseJSON (Object v) = MyUser <$>
v .: "id" <*>
v .: "name" <*>
v .: "reputation"
-- A non-Object value is of the wrong type, so fail.
parseJSON _ = error "Can't parse MyUser from YAML/JSON"
main = do
ymlData <- BS.readFile "users.yml"
let users = Data.Yaml.decode ymlData :: Maybe [MyUser]
-- Print it, just for show
print $ fromJust users
相關問題
- 1. 在Haskell
- 2. 在Haskell
- 3. 在Haskell
- 4. 在Haskell
- 5. 在Haskell
- 6. 在Haskell
- 7. 在Haskell
- 8. 在Haskell
- 9. 在Haskell
- 10. 在Haskell
- 11. 在Haskell
- 12. 在Haskell
- 13. 在Haskell
- 14. 在Haskell
- 15. 在Haskell
- 16. 在Haskell
- 17. 在Haskell
- 18. 在Haskell
- 19. 在Haskell
- 20. 在Haskell
- 21. 在Haskell
- 22. 在Haskell
- 23. 在Haskell
- 24. 在Haskell
- 25. 在Haskell
- 26. 在Haskell
- 27. 在Haskell
- 28. 在Haskell
- 29. 在Haskell
- 30. 在Haskell
我可以't get this work:'/app/Main.hs:21:5:error: •無法將類型'Yaml.Value'與'[Char]'相匹配 預期類型:unordered-containers-0.2.8.0 :Data.HashMap.Base.HashMap text-1.2 .2.1:Data.Text.Internal.Text字符串 實際類型:Yaml.Object •在'(<$>)'的第二個參數中,即'v' 在'(。:)'的第一個參數中,即'交易<$> v' 在'(。:)'的第一個參數中,即 '(。:)交易<$> v「entryDate」<*> v'' – adius
@adius我無法複製。 'cabal sandbox init; cabal安裝yaml; cabal exec runghc index.hs'其中'index.hs'是答案中列出的代碼正確產生'[MyUser {id = 1,name =「未知用戶」,信譽= 0},MyUser {id = 2,name = 「Foo bar」,聲譽= 4}]'對我來說。也許你可以嘗試'cabal update'並更改軟件包版本? –
問題是我沒有從Data.Yaml中導入'。:'。我認爲這是一個由'Control.Applicative'輸出的函數。不幸的是編譯器錯誤在這方面並不真正有用 – adius