我试图找出将带有 n 参数的泛型函数转换为函数的机制,其中每个 n 参数都包含在上下文中。
伪Haskell中的一个简单示例,其中包装类型是元组:
wrap :: (a1 -> a2 -> a3 -> ...) -> Context c -> ((c, a1) -> (c, a2) -> (c, a3) -> ...)
包含上下文的容器由别名Context c
建议,我还要找出一个合理的形式。例如,它可以是n元组,c
的列表,甚至是(c -> c -> c -> ...)
类型的组合。
这很可能与某些巧妙地使用applicative functor或monad有关,但我目前不知道从哪里开始攻击这个问题。任何领导都会深表感谢。
修改。分辨率
正如下面的评论所示,行为可以描述为"给我一些带有 n 参数和[某些上下文]的泛型函数,并为函数的每个参数附加一个上下文&# 34 ;.这个结果函数将应用于 n 结构S a
,使用一些为了利用这些上下文而实现的运算符,如:
(wrap f contexts) §> s1 <§> s2 <§> s3 <§> ....
作为一个例子,我得到了一些像FSVec c a
这样的fixed-size vectors个参数运行的东西。所以我想知道是否有一种方法来传递类型fi :: [a1] -> [a2] -> ...
的通用函数和一些长度和&#34; zip&#34;他们得到fo :: FSVec c a1 -> FSVec c a2 -> ...
。甚至更多,是否可以通用方式完成,即应用任意构造函数,不一定是使用类型级的构造函数(例如上面示例中的元组构造函数)?
替代解决方案
当然,我总是可以&#34; zip&#34;关于结构本身的背景,不得不重新实现(§>)
和(<§>)
以相应地采取行动并为我节省很多麻烦:
f §> (c1, s1) <§> (c2, s2) <§> (c3, s3) <§> ...
仍然,我想&#34;隐藏&#34;这些背景是分开关注的问题。除了风格之外,探索应用函子和类似应用函数的力量实际上是一种很好的心理练习。