gpt4 book ai didi

haskell - haskell 中作为类型的函数

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

我对使用函数的类型感到困惑。

假设我想实现一个字典,当给定 a 和 b 时返回 Maybe b。

type Dict a b = a->Maybe b

如何为这本字典实现插入功能?
insertDict :: (Eq a) => a -> b -> (Dict a b)-> (Dict a b)

我想出了以下事情
insertDict x y mydict = \a->Just y

但这是不正确的,将丢弃以前的字典。

最佳答案

您可以使用“责任链”模式:插入函数检查结果的参数是否为Dict。与它自己的 key 匹配,否则它委托(delegate)前一个 Dict作为参数接收。

type Dict a b = a -> Maybe b

insertDict :: (Eq a) => a -> b -> Dict a b -> Dict a b
-- Note that the k' is the argument of the result dict function
insertDict k v dict k' = if k == k' then Just v else dict k'

emptyDict :: Dict a b
emptyDict _ = Nothing

ghci 中的一些示例:
Λ insertDict 'a' (1::Int) emptyDict $ 'a'
Just 1
Λ insertDict 'b' 2 (insertDict 'a' (1::Int) emptyDict) $ 'a'
Just 1
Λ insertDict 'b' 2 (insertDict 'a' (1::Int) emptyDict) $ 'x'
Nothing

将 map 表示为函数作为第一个近似值是很好的,但这种表示有许多缺点:
  • 搜索值的复杂性与键的数量成线性关系。
  • 函数非常“不透明”,这意味着您无法像使用 data type 那样检查或序列化 map 。 .
  • 关于haskell - haskell 中作为类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48962321/

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