2017-10-23 18 views
0

次のコードが原因で、次のエラーが発生する原因がわかりません。コンパイル時のHaskell型エラー

コード:

type Symbol = Char 

symbols :: [Symbol] 
symbols = ['a'..'f'] 

type Code = [Symbol] 

members :: Code -> Bool 
members xs = and [ b | x <- xs, b <- map (elem x) symbols ] 

コンパイルエラー:あなたが与えた

Couldn't match type ‘Char’ with ‘t0 Symbol’ 
    Expected type: [t0 Symbol] 
     Actual type: [Symbol] 
    • In the second argument of ‘map’, namely ‘symbols’ 
    In the expression: map (elem x) symbols 
    In a stmt of a list comprehension: b <- map (elem x) symbols 
+3

あなたのコードは不完全です - 'xs'とは何ですか? –

+0

@FrankSchmittご迷惑をおかけして編集しました –

答えて

2

コードはいくつかのエラーを持っています。

  1. @FramkSchmittに記載されているように、パラメーターxsがありません。
  2. elem xをリストにマップしようとします。正しいリストが必要です。

ここに私があなたが意図したものがあります。

members :: Code -> Bool 
members xs = and [ x `elem` symbols | x <- xs ] 

これは少し簡潔に書くことができます(私はhlintのようなツールもこの単純化を示唆しています)。

members' :: Code -> Bool 
members' = all (`elem` symbols) 
+0

おかげで、エラーの「t0」が何を意味するのか分かりませんでした! –

関連する問題