gpt4 book ai didi

haskell - 可以给延续单子(monad)更改器(mutator)一个带有一些和许多的替代实例吗?

转载 作者:行者123 更新时间:2023-12-03 20:56:31 25 4
gpt4 key购买 nike

我们可以将延续单子(monad)更改器(mutator)定义为

data Cont r m a = Cont {run :: (a -> m r) -> m r}

我们可以给 Cont r m如果 m 则为 Alternative 实例是 Alternative 的成员通过
empty = Cont $ \f -> empty
ca <|> cb = Cont $ \f -> run ca f <|> run cb f

然后允许 somemany采用他们的默认方法。我的问题是,我们可以定义 some吗?和 many根据 msomemany , 而不是默认定义?显而易见的选择
some ca = Cont $ \f -> some $ run ca f
many ca = Cont $ \f -> many $ run ca f

显然不起作用(他们甚至不进行类型检查)。有没有其他方法可以使用它们(如果我们需要 m 也是一个 monad,那很好)?

供引用, somemany必须是方程的最小解:
  • some v = (:) <$> v <*> many v
  • many v = some v <|> pure []

  • 假设 some :: m a -> m [a]many :: m a -> [a]满足这个定律, some :: Cont r m a -> Cont r m [a]many :: Cont r m a -> Cont r m [a] .

    最佳答案

    号码

    没有来自的箭头

    (forall a. f a -> f [a]) ->
    (forall r. ((a -> f r) -> f r)) -> (([a] -> f r) -> f r)`

    这以一种有趣的方式利用了它的论点。

    唯一的地方 forall a. f a -> f [a]可以应用于 f r .这些是 (a -> f r) -> f r 的结果,就像在你的“明显的选项”和 ([a] -> f r) .这留下了 f [r] 类型的结果。 .唯一可以用 forall r. Alternative f => f [r] 完成的事情生成 f r是索引 f [r]带有一些偏函数 forall r. [r] -> r从一个自然数到另一个不更大的自然数。

    关于haskell - 可以给延续单子(monad)更改器(mutator)一个带有一些和许多的替代实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47524621/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com