2016-09-08 7 views
1

は本当に基本的な質問のように思えるが、私は持っている場合:異種データコンストラクタのテスト方法

data LogLevel = Info | Warning | Error Int 
x = Info 
y = Error 13 

私は

if (x==Info) 

を書くことができますが、どのように私はタイプエラーのためにテストを書くでしょうか?

+1

[データ型のEqを定義せずにHaskellがパターンマッチングを行う方法](http://stackoverflow.com/questions/4718084/how-does-haskell-do-pattern-matching-without (正確にはそうではありませんが、そのスレッドを読むことであなたの質問に答えることができますが、投稿した質問への短い答えは「パターンマッチング」です) – jberryman

+0

とても有難い。 – RoyM

答えて

7

Errorはタイプではありません。それはデータコンストラクタです。パターンマッチングを使用して、タイプLogLevelのさまざまな値を区別できます。ここで

case x of 
    Info -> ... 
    Warning -> ... 
    Error n -> ... 

だけでなく、あなたがxの値に応じて、正しい「ブランチ」を取るが、そのパターンが一致したときにも(nに)Errorに関連付けられた特定の整数を取得します。

+0

ありがとう - それは私が行方不明だったものです – RoyM