haskell初心者です
テストに関して質問させてください
自分で定義したリスト型を返す関数のテストをhspecを用いて実行しようとしています。
-- src/Lexer.hs
module Lexer (TokenType, Token, lexer) where
data TokenType = TK_NUM | TK_OP | TK_EOF deriving (Show)
data Token = Token {
tokenType :: TokenType,
valueString :: String
} deriving (Show)
-- 中略
lexer :: String -> [Token]
-- 中略
このlexer関数に“3+3”を入力に実行した結果をprintすると
[Token {tokenType = TK_NUM, valueString = "3"},Token {tokenType = TK_OP, valueString = "+"},Token {tokenType = TK_NUM, valueString = "3"}]
と出力されます。
これが正しい結果であることのテストを書きたいです。
-- tests/LexerSpec.hs
module LexerSpec (spec) where
import Test.Hspec
import Lexer
spec :: Spec
spec = do
describe "Lexer" $ do
it "number and `+` and `-`" $ do
lexer "3" `shouldBe` [Token {tokenType = TK_NUM, valueString = "3"}] -- ←ここ
stack test
を実行すると、以下のようなエラーが出ます
Not in scope: data constructor 'Token'
Not in scope: data constructor 'tokenType'
Not in scope: data constructor 'valueString'
理解が曖昧な点がたくさんあり、どこに問題があるのかわかっていない状態です。(module、テスト、などなど)
考えられる問題点
- そもそもhpecを用いるべきでない
- testファイルでのimportがうまくいっていない
- exportがうまくいっていない
- テストの書き方がまずい
よろしくおねがいします:man-bowing: