追記:これだと解決できていない。 C# に Sprache というパーサーコンビネーターがあるのだが、最近そいつを継続渡しスタイル(continuation passing style; CPS)にしてやろうと、Haskell のパーサーコンビネーター attoparsec を参考にいじっていた。 そこでこういう型があった。 newtype Parser i a = Parser { runParser :: forall r. State i -> Pos -> More -> Failure i (State i) r -> Success i (State i) a r -> IResult i r } この型単品では C# への翻訳で困らないのだが、次のような関数があると困ったことになる。 plus :: Parser i a -> Parser i a -> Parser i a