하스켈은 MonadState s의 인스턴스를 T1에 파생시킬 수 있지만 T2은 매우 비슷합니다. MonadState s에 대한 인스턴스가 자동으로 파생 될 수 있도록 어떤 식으로 T2의 코드를 수정해야합니까? {-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Control.Monad.Reader
import C
저는 하스켈을 처음 접했고 newtype을 사용하여 무엇이 무엇인지 말할 수 있기를 원하지만 문자열에서 읽어야합니다. 나는 newtype SpecialId Int
deriving (Eq, Ord, Show)
은 내가 newtype이란에서 읽기를 유도 그것이 단지 read "SpecialId 5" :: SpecialId에서 작동 작동하지 않을 경
Either과 Maybe에 대한 문서는 해당 인스턴스가 Show임을 나타냅니다. Either 단순히 Show을, 파생 다음과 같이 정의된다 data Either a b = Left a | Right b
deriving (Eq, Ord, Read, Show, Typeable)
그러나, Maybe하지 않습니다 : 그들은 base의 일부이며 매우 비
모나드 변압기의 파생 인스턴스를 만들 수 없습니다 서면 그러나 • Can't make a derived instance of ‘MonadTrans Wrap’
(even with cunning GeneralizedNewtypeDeriving):
cannot eta-reduce the representation type enough
• In
나는이 두 모듈이 실패 (그들은 (. 데이터 + 0XXXX) 부분 만 다릅니다. dist/dist-sandbox-190abc84/build/libHSserver-0.1.a(Server.o):(.data+0x1b8): undefined reference to `serverzm0zi1_Two_zdfGenericData_closure'
그리고 마지막 메시지는
더 복잡한 유형을 만들기 위해 내 코드에 newtype 래퍼를 추가로 사용하여 탐색했습니다. 또한 읽기/표시를 사용하여 저렴한 직렬화를 많이 수행합니다. 특히 강력한 형식의 구성 파일의 간단한 형식으로 사용하는 것이 좋습니다. 나는이 오늘로 실행 : 의 예는 다음과 같이 시작하고, 내가 언 래핑 명명 된 필드와 함께 지능을 주위에 포장하는 간단한 newty
는 다음과 같은 컴파일 : {-# LANGUAGE DeriveGeneriC#-}
import Data.Csv
import GHC.Generics
data Foo = Foo { foo :: Int } deriving (Generic)
instance ToNamedRecord Foo
을하지만, 다음은하지 않습니다 {-# LANGUAGE Deriv
differentiable type이 있으면 its Zipper is a Comonad입니다. 이에 대해 Dan Burton은 "파생이 합성어를 만든다면 통합이 모나드를 만드는가? 아니면 그 말도 안 되는가?"라고 물었습니다. 나는이 질문에 특별한 의미를주고 싶다. 유형을 차별화 할 수 있다면 반드시 모나드입니까? 질문 한 제제는 우리가 Monad laws
나는 Data.IP에서 IP 유형의 newtype 별칭을 만들어 : {-# LANGUAGE GeneralizedNewtypeDeriving #-}
module IPAddress (IPAddress) where
import Data.IP (IP)
import Database.PostgreSQL.Simple.ToField
newtype IPAddr
아래 코드에서 대수 데이터 형식을 정의하고이를 Show의 인스턴스로 지정하려고합니다. 그러나 컴파일 타임 오류가 발생합니다 (아래 포함). 내가 도대체 뭘 잘못하고있는 겁니까? 저는 정확한 구문 (atherast per this post)을 사용하고 있다고 생각합니다. 컨텍스트를 들어, 나는 다음과 같은 컴파일 타임 오류를 받고 있어요 Problem #