gpt4 book ai didi

string - 在 Haskell 中 Maybe String 和 Maybe Int 都是幺半群吗?

转载 作者:行者123 更新时间:2023-12-01 22:54:29 25 4
gpt4 key购买 nike

我对 Maybe Int 和 Maybe String 是否都是 Haskell 中的幺半群感到有点困惑,因为我真的不知道根据具有中性元素和结合性规则的幺半群可以将哪些函数应用于 Int 或 String!谁能帮帮我?

最佳答案

只要 a 本身有一个 Monoid 实例,任何 Maybe a 都有一个 Monoid 实例;两个 Just 值的组合只是根据它们的实例组合包装值,而任何与 Nothing 组合的东西本身都是 Nothing

String 有一个 Monoid 实例,因为它是 [Char] 的别名;通过以空列表作为身份的列表连接,所有列表都是幺半群。因此,Maybe String 也是一个幺半群。

> Just "Fo" <> Just "o"
Just "Foo"
> Just "Fo" <> Nothing
Just "Fo"

可能 Int 不是幺半群,因为 Int 不是幺半群。这是因为对于如何使 Int 成为幺半群有多种选择,因此没有一个选择是特殊的。相反,使用不同的 Monoid 实例定义了几个新类型,以阐明您要使用的操作。

> import Data.Monoid
> (3 :: Int) <> 5

<interactive>:8:1: error:
• No instance for (Semigroup Int) arising from a use of ‘<>’
• In the expression: (3 :: Int) <> 5
In an equation for ‘it’: it = (3 :: Int) <> 5

-- (+) and 0
> Sum (3 :: Int) <> Sum 5
Sum {getSum = 8}

-- (*) and 1
> Product (3 :: Int) <> Product 5
Product {getProduct = 15}

> Just (Sum (3 :: Int)) <> Just (Sum 5)
Just (Sum {getSum = 8})
> Just (Sum (3 :: Int)) <> Nothing
Just (Sum {getSum = 3})

关于string - 在 Haskell 中 Maybe String 和 Maybe Int 都是幺半群吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73600888/

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