【发布时间】:2017-04-27 13:00:33
【问题描述】:
背景:我不明白 ~ 并正在请求一个用例。
给定:
{-# LANGUAGE GADTs #-}
f :: a ~ b => a -> b -> b
f a b = a
g :: a -> a -> a
g a b = a
在我看来,这两个功能是相等的:
Prelude> :r
[1 of 1] Compiling Main ( TypeEq.hs, interpreted )
Ok, modules loaded: Main.
*Main> f 10 20
10
*Main> g 10 20
10
在什么情况下使用f而不是g有用?
【问题讨论】:
-
确实,在这种情况下没有任何优势:这些功能是平等的。我认为,您需要诸如类型族或 GADT 之类的东西才能看到一些有用的东西。或者,也许 $Data.Typeable.eqT$ 可以作为一个很好的例子。
-
如果您想知道如何以一种非常有用的方式使用
~,请阅读 Chris Done 的这篇精彩博文:chrisdone.com/posts/haskell-constraint-trick
标签: haskell