haskell - Haskell:如何从 Right 中提取值
问题描述
我正在构建一个简单的脚本来解析每行两个项目的 CSV 文件:
//Main.hs
module Main where
import qualified Data.ByteString.Lazy as BL
import qualified Data.Vector as V
import Data.Csv
type Row = (BL.ByteString, BL.ByteString)
main :: IO ()
main = do
csvData <- BL.readFile "csvs/twostringsperrow.csv"
let v = decode NoHeader csvData :: Either String (V.Vector Row)
putStrLn "All done"
该脚本有效。显然它目前并没有多大作用,但它确实有效,这令人放心。
我现在想在 GHCi 中与之交互,所以我运行了这几行:
$ stack ghci
...
*Main> csvData <- BL.readFile "csvs/twostringsperrow.csv"
*Main> let v = decode NoHeader csvData :: Either String (V.Vector Row)
*Main> v
Right [("1","2"),("3","4")]
此时我可以看到解析已经成功,并且想将其[("1","2"),("3","4")]
取出Right
到一个名为的变量df
中,以便我可以使用它。IE:
*Main> let df = <something here> v
*Main> df
[("1","2"),("3","4")]
我怎么做?
解决方案
您可以在此处使用模式匹配逻辑。例如:
let Right df = v
因此,我们在这里将数据从Right
数据构造函数中解包出来。
例如,您可以编写一个同时处理 theLeft
和Right
case 的函数,因为通常最好实现总函数(可以处理由类型指定的整个值空间的函数)。
推荐阅读
- python - Python social-auth-app-django 'social' 不是已注册的命名空间
- javascript - 在Algolia中按属性获取单个对象
- angular - 路由器导航到子路由 - Angular 6
- python - 无法使用python获取xml文件的元素值
- sql - 带组的 SQL 透视数据
- mysql - Mysql用户在where子句中定义变量日期类型
- excel - 使用 Vlookup 查找重复值
- python - 在 Centos 7 上从 python 访问 Couchbase 的问题
- git - 子文件夹中有多个 .gitignore
- ios - 无法将 X 类型的值转换为预期的参数类型 XX