2017-10-23 6 views
0

왜 다음 코드가 다음 오류의 원인인지 잘 모르겠습니다.하스켈 형식 오류 컴파일시

코드 :

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' 의미가 뭔지 확실하지 않았다! –