2016-10-30 3 views
3

이 프로그램에 문제가 있습니다.아무것도 필터링하고 압축을 풉니 다.

filterJust :: [Maybe a] -> [a] 

filterJust [] = [] 
filterJust x = map fromJust (filter (isJust) x) 

하지만 ghci이

but ghci keeps reporting this

편집보고 계속 :

내가 만든 있도록 별도의 모듈을 사용하지 않으

이 :

filterJust :: [Maybe a] -> [a] 

filterJust x = map unpack (filter (Nothing /=) x) 

unpack (Just a) = a 

과 이 메시지가 나타납니다.

and i get this message

이유를 이해하지 못합니다. 나는 아무것도 가져 오지 않고 Eq 함수를 사용할 수 있어야한다.

+3

'fromJust'와'inJust'는 Prelude에 없지만 Data.Maybe에 있습니다. 'fromJust'와'inJust'를 전역 스코프로 임포트하는'import Data.Maybe (fromJust, isJust)'또는'Data로부터 모든 것을 임포트하는'Import Data.Maybe'와 같은 라인으로 모듈을 시작해야합니다. 어쩌면 글로벌 범위로). 또한 동일한 오류가있는 여섯 번의 컴파일 라운드 스크린 샷을 찍는 대신 한 번의 컴파일 오류에 대한 텍스트를 질문에 복사하십시오. –

+0

왜'filterJust [] = []'가 필요합니까? –

+0

덕분에 많은 Rhymoid. Im 바보와 tought 그것은 실제로 Prelude에있다 –

답변

-3

당신은 fromJust 년부터 import을, 누락 및 isJustData.Maybe에 있고없는이 같은 Prelude

뭔가 당신은 filterJust 기능을 작성할 필요가 없습니다

import Data.Maybe (fromJust) 
maybe2list x = if x == Nothing then [] else [fromJust x] 
filterJust lst = lst >>= maybe2list 
+1

투표자 감소, 코멘트가 훨씬 건설적 일 것입니다. –

+1

1) 이제 OP의 문제 중 절반 만 해결합니다. 왜냐하면 이제는 'isJust'가 어디 있는지 알지 못하기 때문입니다. 2) OP가 초보자가 아닐지라도, OP 버전에 비해이 버전은 검증되거나 관련 성능상의 이점없이 읽을 수 없습니다. 3) OP는 최상위 함수의 유형을 적절하게 선언합니다. 당신 타입은 어디에 있습니까? 이것은 하스켈 프로그래머를 시작하는 나쁜 예를 설정합니다. –

+0

작동 코드가 다운 투표를해야한다고 생각하지 않습니다. 어떤 이유로'SO'에서'haskell'ers가 동의하지 않는 것 같아서, 저와 다른 사람들이'haskell' 커뮤니티에 내 시간을 기부하는 것을 꺼려합니다. –

3
  • /=Eq ((/=) :: (Eq a) -> a -> a -> Bool)를 구현 한 형태의 값을 사용할 수있다.
  • Maybe a이 인 경우에만 a (instance (Eq a) => Eq (Maybe a))이있는 경우에만 지원됩니다. [Maybe a] -> [a]

따라서 filterJust/=을 사용할 수 없습니다 :

  • 귀하의 유형 서명은 모든 유형의 a에 대한 filterJust 작품, Eq를 구현하지 않는 경우에도 사람들은 말한다.

  • 관련 문제