gpt4 book ai didi

haskell - `newtype` 上的模式匹配

转载 作者:行者123 更新时间:2023-12-01 08:22:59 26 4
gpt4 key购买 nike

给定以下新类型:

newtype Bar a = Bar { biz::Int -> Int -> Int }

是否可以对 Int -> Int 参数进行模式匹配?

例如,假设我想在 Bar 上对 mach 进行模式匹配,然后在前两个参数上进行模式匹配。

pm :: Bar a -> Bool
pm (Bar (x y)) = x == y

但是我得到一个编译时错误:

Prelude> :l NewtypeWork.hs
[1 of 1] Compiling Main ( NewtypeWork.hs, interpreted )

NewtypeWork.hs:13:10: Parse error in pattern: x
Failed, modules loaded: none.

总的来说,我试图了解如何fmap 函数Int -> a 的第二个参数。我希望这个例子能帮助我理解如何完成这个任务。

最佳答案

我不确定你问的有没有道理。

这将编译:

pm :: Bar a -> Bool
pm (Bar f) = undefined

f 的类型是Int -> Int -> Int。您建议如何将 f 转换为 Bool

例如,f 可能是整数的加法 - (+)

pm 的有效定义示例是:

pm (Bar f) = f 1 3 > 0

更新:

要回答您评论中的问题,请首先考虑:

data Foo a = Int -> a

然后 Foo 可以变成一个仿函数:

(fmap f g) i = f (g i) -- g::Int -> a, f::a -> b

即您只是将 f 应用于 g i 中类型 a 的值。

现在您可以推断出此数据类型:

data Bar a = Int -> Maybe (a, Int)

根据定义:

(fmap f g) i = case g i of
Nothing -> Nothing
Just (a,j) -> Just (f a, j)

同样,我们只是将 f 应用于 g i 中类型 a 的值。

关于haskell - `newtype` 上的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27652414/

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