홈>
나무에 대한 하스켈 맵>에서 hammar의 답변에서 트리 유형에 대해 fmap을 정의하려고합니다. a>
그의 정의는 내가 막연하게 익숙한 pragma를 사용하는 functor를 파생시킨다. 그의 정의는
{-# LANGUAGE DeriveFunctor #-}
data Tree a = Leaf a | Node (Tree a) (Tree a)
deriving (Functor, Show)
GHG에서 pragma와 정의를 작동시킬 수 없습니다. 아래는 세 가지 잘못된 시도이며, 의견을 보내 주셔서 감사합니다!
첫 시도 :
Prelude> {-# LANGUAGE DeriveFunctor #-}
Prelude> data Tree a = Leaf a | Node (Tree a) (Tree a)
Prelude> deriving (Functor, Show)
<interactive>:30:5: parse error on input ‘deriving’
두 번째 시도 :
Prelude> {-# LANGUAGE DeriveFunctor #-}
Prelude> data Tree a = Leaf a | Node (Tree a) (Tree a) deriving (Functor, Show)
<interactive>:32:57:
Can't make a derived instance of ‘Functor Tree’:
You need DeriveFunctor to derive an instance for this class
In the data declaration for ‘Tree’
세 번째 시도 :
Prelude> :{
Prelude| {-# LANGUAGE DeriveFunctor #-}
Prelude| data Tree a = Leaf a | Node (Tree a) (Tree a)
Prelude| deriving (Functor, Show)
Prelude| :}
<interactive>:35:1: parse error on input ‘data’
- 답변 # 1
관련 자료
- c (arduino)에서 #define을 사용하여 컴파일러의 정의 플래그 (-D)를 올바르게 하드 코딩하는 방법
- oop - r의 s3 클래스 - 수퍼 클래스와 하위 클래스를 올바르게 정의하는 방법은 무엇입니까?
- c++ - 템플릿 클래스를 템플릿 매개 변수로 사용하여 템플릿 클래스에서 템플릿 함수를 올바르게 정의하는 방법
- 자바 스크립트에서 변수를 올바르게 정의하고 세미콜론을 추가하는 방법
- TypeScript에서 배열에 대한 필수 데이터 유형 정의
- javascript - 한 글자 접두사에 응답하지 않도록 봇 접두사를 올바르게 정의하려면 어떻게해야합니까?
- gradle - 다른 프로젝트에서 종속성으로 사용할 이슈 정의
- python - 편지 쓰기 파일에서 서비스를 올바르게 정의하는 방법
- reactjs - react-router-dom에서 폴백 경로를 올바르게 정의하는 방법
- MATLAB struct - matlab 구조체 - struct 인스턴스화에서 필드의 데이터 유형을 프로그래밍 방식으로 정의 하시겠습니까?
- mysql - sailsjs 모델 파일에서 크기로"TINYINT"데이터 유형을 정의하는 방법
- javascript - 배열 종속성에 useEffect 후크를 올바르게 사용하는 방법 redux store에서 상태를 전달했지만 여전히 내 구성 요소가 무한대로 렌더링됩니다
관련 질문
- Haskell에서 MonadPlus의 기본 유형 평가는 무엇입니까?
- 이 code 스 니펫에서 Haskell 오류 "Variable not in scope"?
- haskell - 숫자 철자의 길이가 그것보다 큰 값의 철자의 길이보다 큰 1에서 8까지의 모든 인스턴스를 출력합니까?
- haskell - 사례에서 여러 조건 확인
- haskell - GHCI 디스플레이가 물리적으로 보유한 것보다 더 큰 가치의 메모리를 어떻게 사용할 수 있습니까?
- haskell - ghci에서 비 Prelude 기능에 간결하게 우선 순위 부여
- ghci - Haskell 스택, 전 세계 여러 패키지에서 발견 된 모호한 모듈 이름을 되 돌리는 방법
GHCi에서는
:set
로 pragma를 설정했습니다. :와이즈 비즈 이후 절은 여러 줄에 걸쳐 있으며
data
사이에 선언 할 수 있습니다 그리고:{
:이제 작동해야합니다 (로컬에서 테스트). 우리는 예를 들어
Prelude> :{ Prelude| data Tree a = Leaf a | Node (Tree a) (Tree a) Prelude| deriving (Functor, Show) Prelude| :}
를 수행 할 수 있습니다 :실패 시도 설명:
<올> 당신의Prelude> fmap (+1) (Node (Leaf 12) (Leaf 25)) Node (Leaf 13) (Leaf 26)
때문에첫 번째는 실패 절은 여러 줄에 걸쳐 있으므로 한 줄에 넣거나 일종의 그룹화를 사용해야합니다. 그럼에도 불구하고 pragma를 사용하도록 설정하지 않았으므로 여기에 두 가지 오류가 있습니다.
지금
data
에 문제가 없습니다 절, 그러나 이와 같은 pragma를 활성화 할 수는 없습니다. 그리고실제로 pragma가 문제입니다.
data