我正在尝试使用monadic返回类型创建一个可变参数函数,其参数也需要monadic上下文.(我不知道如何来形容第二点:例如,printf可以返回IO (),但在它是否最终被它的参数将被视为相同的不同IO ()或String).
基本上,我有一个数据构造函数,比如两个Char参数.我想提供两个指针样式ID Char参数,它可以State通过类型类实例从封闭的monad 自动解码.所以,get >>= \s -> foo1adic (Constructor (idGet s id1) (idGet s id2))我想做而不是做fooVariadic Constructor id1 id2.
接下来是我到目前为止所获得的文化Haskell样式,以防有人想复制它并弄乱它.
一,基本环境:
> {-# LANGUAGE FlexibleContexts #-}
> {-# LANGUAGE FlexibleInstances #-}
> {-# LANGUAGE MultiParamTypeClasses #-}
> import Control.Monad.Trans.State
> data Foo = Foo0
> | Foo1 Char
> | Foo2 Bool Char
> | Foo3 Char Bool Char
> deriving …Run Code Online (Sandbox Code Playgroud)