>

나무에 대한 하스켈 맵에서 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

    GHCi에서는 :set 로 pragma를 설정했습니다. :

    Prelude> :set -XDeriveFunctor
    
    

    와이즈 비즈 이후  절은 여러 줄에 걸쳐 있으며 data 사이에 선언 할 수 있습니다  그리고 :{ :

    :}
    
    

    이제 작동해야합니다 (로컬에서 테스트). 우리는 예를 들어 Prelude> :{ Prelude| data Tree a = Leaf a | Node (Tree a) (Tree a) Prelude| deriving (Functor, Show) Prelude| :} 를 수행 할 수 있습니다 :

    fmap
    
    

    실패 시도 설명:

    <올> 당신의 Prelude> fmap (+1) (Node (Leaf 12) (Leaf 25)) Node (Leaf 13) (Leaf 26) 때문에

    첫 번째는 실패  절은 여러 줄에 걸쳐 있으므로 한 줄에 넣거나 일종의 그룹화를 사용해야합니다. 그럼에도 불구하고 pragma를 사용하도록 설정하지 않았으므로 여기에 두 가지 오류가 있습니다.

    지금 data 에 문제가 없습니다  절, 그러나 이와 같은 pragma를 활성화 할 수는 없습니다. 그리고

    실제로 pragma가 문제입니다.

    data

  • 이전 jquery - 자바 스크립트는 클릭 한 텍스트를 비활성화하고 클릭하지 않은 텍스트는 활성화합니다
  • 다음 html - Angularjs 식 링크를 사용할 때 Youtube Video가 표시되지 않습니까?