私はハスケルを学んでいるので、それはおそらくかなり些細なことですが、書き直しの仕方や使い方についてのいくつかの指摘に感謝します。リファクタリングwhere節
私は、作業コード(使用パッケージ:HTF、ParsecとFlowを):以下のいる
{-# OPTIONS_GHC -F -pgmF htfpp #-}
{-# LANGUAGE FlexibleContexts #-}
module Main where
import Test.Framework -- assertEqual, assertBool, htfMain, htf_thisModulesTests
import Text.ParserCombinators.Parsec (eof, spaces, parse)
import Flow ((|>))
import Data.Either (isLeft)
whiteSpaces = spaces
test_parse_whitespace = do
mapM_ positive [
"", " ", "\t", "\n", "\r\n", " \r\n ",
" \t \r\n \t \n \r \t "
]
mapM_ negative ["x", " x", "x ", " x ", "\t_\t"]
where
parser = whiteSpaces >> eof
parseIt = parse parser ""
positive str = assertEqual (parseIt str) (Right())
negative str = assertBool (parseIt str |> isLeft)
main :: IO()
main = htfMain htf_thisModulesTests
私は一部ほぼ同じインクルードを持つ新しいテストを追加していたので、私はこのようにそれをリファクタリングしてみました:
pos_neg_case parser = do
return [positive, negative]
where
fullParser = parser >> eof
parseIt = parse fullParser ""
positive str = assertEqual (parseIt str) (Right())
negative str = assertBool (parseIt str |> isLeft)
test_parse_whitespace' = do
mapM_ positive [
"", " ", "\t", "\n", "\r\n", " \r\n ",
" \t \r\n \t \n \r \t "
]
mapM_ negative ["x", " x", "x ", " x ", "\t_\t"]
where
[positive, negative] = pos_neg_case whiteSpaces
これはうまくいきません(コンパイラが示唆するようにlang。機能をオンにしても)。
Couldn't match expected type ‘[Char] -> m b0’
with actual type ‘[String -> IO()]’
Relevant bindings include
test_parse_whitespace' :: m() (bound at test/Spec.hs:21:1)
In the first argument of ‘mapM_’, namely ‘positive’
In a stmt of a 'do' block:
mapM_ positive ["", " ", "\t", "\n", ....]
Couldn't match expected type ‘[Char] -> m b1’
with actual type ‘[String -> IO()]’
Relevant bindings include
test_parse_whitespace' :: m() (bound at test/Spec.hs:21:1)
In the first argument of ‘mapM_’, namely ‘negative’
In a stmt of a 'do' block:
mapM_ negative ["x", " x", "x ", " x ", ....]
'assertEqual'と' assertBool'は[* HTF *](http://hackage.haskell.org/package/HTF-0.13.1)からのものです。(/>)は、[* flow *](https://hackage.haskell.org/package/flow-1.0.7/docs/Flow)からのものです。 .html)、 'flip($)'と '(&)'と同義語です。 (あまり知られていない、あなたが使用しているパッケージには、より明確な質問があります) – duplode
@duplodeああ、ありがとうございます(輸入が十分であると思いました)。私はフロー*がハスケラーの間であまり人気がないことを知っていましたが、* HTF *もそうではありませんか?ボイラープレートなしでモジュール内のすべての単体テストを実行できるいくつかの優れた選択肢がありますか? – monnef
"私は輸入が十分であると思った" - 彼らは検索するのに十分な情報を提供し、最終的に関連する機能を見つけるという意味で十分である。それは読者の質問の便宜の問題です。 (あなたが使ったパッケージのどれに対しても何の言い方もしていません。) – duplode