だから私はから(CSVファイルのためにとHaskellのエラー
table' <- parseCSVFromFile filepath
が、と私は手でファイルを結合してのだ機能をテスト全体のユーティリティ機能の小さなtoyboxを書いていましたText.CSV
)
parseCSVFromFile :: FilePath -> IO (Either parsec-3.1.9:Text.Parsec.Error.ParseError CSV)
ので、私は、このエラーのcsvがらくた
stripBare csv = head $ rights $ flip (:) [] csv
のいずれかを取り除くために迅速な行を書かなければなりませんでした
とし、table = stripBare table'
と再定義してください。この後、リスト機能は、CSVファイルの内容で作業して人生は
に行く(余談:驚くべきことにData.Either
での直接Either a b -> b
機能がないので、私はData.Either.rights :: [Either a b] -> [b]
使用。)
私はの仕事をやってみたかったですcsvのタイプを解き、ワンショットでハンドルにバインドします。私はdo
が欠落することができると言って
table = stripBare $ table' <- parseCSVFromFile filepath
が、これは(<-
)の解析エラーを与えるようなものが...その後
table = stripBare $ do table' <- parseCSVFromFile filepath
があることdo
ブロック必見の最後の文を言って私に叫びます表現である。
私は間違っていますか?別の好奇心として
、私は
は非常に単純な方法でHaskellのdesugarsに表記を行うことをhereを見ました。
do
x <- foo
e1
e2
...
は、私は、これは魅力的見つける
foo >>= \x ->
do
e1
e2
になり、
head $ rights $ flip (:) [] csv
は危険であるような私に型エラー
*Toy> :type (parseCSVFromFile "~/.csv") >>= \x -> x
<interactive>:1:52: error:
* Couldn't match type `Either
parsec-3.1.9:Text.Parsec.Error.ParseError'
with `IO'
Expected type: IO CSV
Actual type: Either parsec-3.1.9:Text.Parsec.Error.ParseError CSV
* In the expression: x
In the second argument of `(>>=)', namely `\ x -> x'
In the expression:
(parseCSVFromFile "~/.csv") >>= \ x -> x
「どちらかb→b」が存在しないことは驚くことではない。あなたが 'a'を持っていても' b'がない場合は 'b'を作りますか? – molbdnilo
ああ、そうです。 @molbdniloの不在を許すリスト – Tshimanga