当前位置:  开发笔记 > 前端 > 正文

在Haskell中只获取Maybe的Value组件

如何解决《在Haskell中只获取Maybe的Value组件》经验,为你挑选了1个好方法。

有一个返回的功能:

>>> ["Just (Number 8000.0)","Just (Number 93.0)","Just (String \"test\")"]

获得价值的最佳方法是什么?

>>> ["8000.0", "93.0", "test"]

代码试图使用prism来自Aeson的s 来解析JSON .

jsonFile :: FilePath
jsonFile = "test.json"

getJSON :: IO BS.ByteString
getJSON = BS.readFile jsonFile

main :: IO ()
main = do
     input <- getJSON
     print $ f input

f :: BS.ByteString -> [String]
f x = [ show $ (x ^? key "a" . nth 0 . key "b")
        , show $ x ^? key "a" . nth 0 . key "c"
        , show $ x ^? key "a" . nth 0 . key "d" 
        ]

Koterpillar.. 8

catMaybes from Data.Maybe只会Just在列表中保留值,丢弃任何Nothings.

(提示:您可以使用Hoogle搜索[Maybe a] - > [a]).

更新:如果要替换Nothing其他内容,请使用fromMaybe和您的默认值,即

map (fromMaybe "Nothing") (f x)

它看起来像你有字符串而不是Maybe列表内; 你必须show从每个元素中删除调用.

再次更新:让我们将所有内容转换为字符串!

map (fromMaybe "nothing" . fmap show)

外部map将转换应用于每个元素.fmap show将内部值转换Just为字符串并Nothing单独离开(请注意1转换为字符串的数字"1":

> map (fmap show) [Just 1, Nothing]
[Just "1",Nothing]

然后fromMaybe "nothing"解压缩Just值并替换Nothing为您选择的字符串.

> map (fromMaybe "nothing" . fmap show) [Just 1, Nothing]
["1","nothing"]

我建议你在使用Haskell时密切关注类型,将所有内容转换为字符串会消除使用类型良好的语言带来的好处.



1> Koterpillar..:

catMaybes from Data.Maybe只会Just在列表中保留值,丢弃任何Nothings.

(提示:您可以使用Hoogle搜索[Maybe a] - > [a]).

更新:如果要替换Nothing其他内容,请使用fromMaybe和您的默认值,即

map (fromMaybe "Nothing") (f x)

它看起来像你有字符串而不是Maybe列表内; 你必须show从每个元素中删除调用.

再次更新:让我们将所有内容转换为字符串!

map (fromMaybe "nothing" . fmap show)

外部map将转换应用于每个元素.fmap show将内部值转换Just为字符串并Nothing单独离开(请注意1转换为字符串的数字"1":

> map (fmap show) [Just 1, Nothing]
[Just "1",Nothing]

然后fromMaybe "nothing"解压缩Just值并替换Nothing为您选择的字符串.

> map (fromMaybe "nothing" . fmap show) [Just 1, Nothing]
["1","nothing"]

我建议你在使用Haskell时密切关注类型,将所有内容转换为字符串会消除使用类型良好的语言带来的好处.


您可能应该扩展您的示例以演示列表包含"Nothing"时所需的行为,然后.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有