2016-09-22 14 views
2

テーブルをきれいに印刷して基本的なクエリを実行できるプログラムをHaskellで作成しています。関数内の非網羅的なパターン

printTable :: Table -> [String] 
printTable [email protected](header:rows) = [addLine] ++ addHeader ++ [addLine] ++ addRows rows ++ [addLine] 
    where widthList   = columnWidths table 
     makeTupleList []   = [] 
     makeTupleList (x:xs)  = zip widthList x : makeTupleList (xs) 
     addRows line    = map printRow (makeTupleList line) 
     addLine     = printLine widthList 
     addHeader    = addRows [(map.map) toUpper header] 

注:以下の機能は、表を印刷するコードの断片である「unlines」関数と、この関数を呼び出した後Table == [[String]]

、テーブルが印刷されます。

私はこの機能をテストして、[[String]]引数を与えれば正しく動作します。しかし、私は私の「メイン」のコードでこの機能をテストする場合、私はエラーを取得:

Non-exhaustive patterns in function printTable 

唯一の違いは、私のメインのコードでは、プログラムのユーザが入力としてテキストファイルを与えることができるということです。

main :: IO() 
main = interact (lines >>> exercise >>> unlines) 

exercise :: [String] -> [String] 
exercise = parseTable >>> select "gender" "male" 
        >>> project ["last", "first", "salary"] >>> printTable 

この問題を解決するには、何か歓迎すべきものです。

答えて

3

(x:xs)でパターンを一致させると、少なくとも1つの項目がリストにある場合にのみ一致します。

空のケースTableを処理する必要があります。

printTable [] = ...