gpt4 book ai didi

haskell - 看似合法的 Eta 减少导致问题

转载 作者:行者123 更新时间:2023-12-04 13:56:36 25 4
gpt4 key购买 nike

我正在尝试 η-reduce 函数

foldr :: (a -> b -> b) -> b -> BinaryTree a -> b
foldr combiner base tree = foldMap combiner tree base where
foldMap = ...


foldMap :: (a -> b -> b) -> BinaryTree a -> b -> b

按预期工作。

我减少了 η
foldr combiner base tree = foldMap combiner tree base


foldr combiner = flip $ foldMap combiner where
...

这按预期工作。看来我应该能够完全减少 η-reduce 以获得无点函数
foldr = flip $ foldMap where
...

但是,这会导致编译错误
Couldn't match type ‘a -> b -> b’ with ‘BinaryTree t0’
Expected type: (a -> b -> b) -> b -> BinaryTree a -> b
Actual type: BinaryTree t0 -> (t0 -> b -> b) -> b -> b

是否有可能进一步减少 η-reduce,如果可以,怎么做?

最佳答案

引发错误,因为 g b = f $ a b不等于 g = f $ a .

在第一种情况下,您将获得以下评估序列:

  • 应用函数ab (以 a 作为参数调用 b)
  • 应用函数f结果

  • 在第二种情况下:
  • 应用函数fa

  • 因此,您只需 flip foldMap函数,但实际上想要 flip foldMap通过 combiner后的函数给它。这使我们得出结论,您实际上想要该组合物,即。 e. .功能:
    foldr = flip . foldMap where
    ...

    关于haskell - 看似合法的 Eta 减少导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52652030/

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