나는 RWST
모나드를 가지고 있으며 generic 함수가 Writer
부분과 상호 작용하는 함수가 있습니다. 참고로이 ghci의 서명을 컴파일하기 위해 수행 할 수있는 작업
, RWST
이 같은 경우 : DefWriter
날에 의해 단지 type DefWriter = Seq Error
(오류가 정의되어 있습니다
type Definition = RWS SapphireReader DefWriter DefState
:
newtype RWST r w s m a = RWST {runRWST :: r -> s -> m (a, s, w)}
instance (Monoid w, Monad m) => Monad (RWST r w s m)
instance Functor m => Functor (RWST r w s m)
instance (Monoid w, MonadFix m) => MonadFix (RWST r w s m)
instance (Monoid w, MonadPlus m) => MonadPlus (RWST r w s m)
instance Monoid w => MonadTrans (RWST r w s)
instance (Monoid w, MonadIO m) => MonadIO (RWST r w s m)
instance (Monoid w, Monad m) => MonadWriter w (RWST r w s m)
instance (Monad m, Monoid w) => MonadState s (RWST r w s m)
instance (Monad m, Monoid w) => MonadReader r (RWST r w s m)
instance (Monoid w, Monad m) => MonadRWS r w s (RWST r w s m)
그래서 내가 가진이처럼 데이터 Definition
, 아니 Control.Monad.Error
하나). 내가 ghci에서 파일을로드하고 :t tellPError
을하고, 서명을 제거 시도,
tellPError :: Position -> ParseError -> Definition()
tellPError posn err = tell (singleton $ PError posn err)
지금 나는 새로운 RWST을 필요로하고
일반적인
tellPError
를 원하는 :
나는 작업 기능을했다.
λ :t tellPError
tellPError :: MonadWriter (Seq Error.Error) m => Position -> ParseError -> m()
나는 코드에 서명, 그것은 컴파일되지 않습니다 내 기능을 제공하려고 :
Non type-variable argument
in the constraint: MonadWriter (Seq Error) m
(Use -XFlexibleContexts to permit this)
In the type signature for `tellPError':
tellPError :: MonadWriter (Seq Error) m =>
Position -> ParseError -> m()
난 정말이 플래그가 필요하십니까? 나는 그것을 시도하고 컴파일했지만 작동하지 않을 것이다.
tellPError :: Position -> ParseError -> RWS r (Seq Error) s()
tellPError posn err = tell (singleton $ PError posn err)
컴파일 :