【发布时间】:2014-12-26 02:56:15
【问题描述】:
给定以下新类型:
newtype Bar a = Bar { biz :: Int -> Int -> Int }
是否可以对 Int -> Int 参数进行模式匹配?
例如,假设我想对Bar 进行模式匹配,然后对前两个参数进行模式匹配。
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.
总体而言,我试图了解如何在函数 Int -> a 的第二个参数上使用 fmap。我希望这个例子能帮助我理解如何完成这个任务。
【问题讨论】:
-
问题的两个部分可能没有按照您的想法联系起来。在
Bar中,从未使用过类型参数a(这就是所谓的幻像类型参数)。因此,Bar的唯一有效Functor实例是fmap _ b = b