Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何将一元值馈送给另一个一元值?_Haskell - Fatal编程技术网

Haskell 如何将一元值馈送给另一个一元值?

Haskell 如何将一元值馈送给另一个一元值?,haskell,Haskell,让我有一个 F1::K字符串 F2::L() 如何从F2调用F1 K和L都是呻吟者。所以我在找类似的东西 (a->L b)->K a->L b Hoogle搜索结果在 foldMapM::(Monad m,Monoid w,Foldable t)=>(a->mw)->ta->mw 在我的例子中,它与我想要的匹配,就像在t中一样,是不可折叠的。一般来说,没有办法做到这一点。例如,您不能轻易地从ma传递到Identity a,否则您可以创建一个函数ma->a,我们不希望每个monadm(尤其是IO)

让我有一个

F1::K字符串

F2::L()

如何从F2调用F1

K和L都是呻吟者。所以我在找类似的东西

(a->L b)->K a->L b

Hoogle搜索结果在
foldMapM::(Monad m,Monoid w,Foldable t)=>(a->mw)->ta->mw


在我的例子中,它与我想要的匹配,就像在
t
中一样,是不可折叠的。

一般来说,没有办法做到这一点。例如,您不能轻易地从
ma
传递到
Identity a
,否则您可以创建一个函数
ma->a
,我们不希望每个monad
m
(尤其是
IO
)都有这个函数。哦,这很有意义,谢谢,一般来说这是不可能的,但是如果你有一个更具体的例子,也许我们可以解决这个问题。当我们不得不“更改monad”时,我们有时会使用一个特定的类型类来有选择地允许更改。例如,
MonadIO
类用于那些monad
m
允许转换
liftIO::IO a->ma
,从而可以在
m
内部“运行IO”。这不可能适用于所有单子,但如果可能,我们可以将单子标记为
MonadIO
one。您可以对任何其他单子使用相同的技术,但是您仍然需要逐个定义转换,因为没有通用的方法进行。我也可以制作一个新的单子单子?在一个新的单子X中组合K和L,然后实现我想做的事情?这是一个合理的方法吗?一般来说,没有办法做到这一点。例如,您不能轻易地从
ma
传递到
Identity a
,否则您可以创建一个函数
ma->a
,我们不希望每个monad
m
(尤其是
IO
)都有这个函数。哦,这很有意义,谢谢,一般来说这是不可能的,但是如果你有一个更具体的例子,也许我们可以解决这个问题。当我们不得不“更改monad”时,我们有时会使用一个特定的类型类来有选择地允许更改。例如,
MonadIO
类用于那些monad
m
允许转换
liftIO::IO a->ma
,从而可以在
m
内部“运行IO”。这不可能适用于所有单子,但如果可能,我们可以将单子标记为
MonadIO
one。您可以对任何其他单子使用相同的技术,但是您仍然需要逐个定义转换,因为没有通用的方法进行。我也可以制作一个新的单子单子?在一个新的单子X中组合K和L,然后实现我想做的事情?这是一个合理的方法吗?