可能没有办法做到这一点,但我只是想问以防万一。
我的数据类型是一个像这样的简单元组:
data Tup a = T a a
我有这样的模式同义词:
pattern (:?) :: () => Floating a => a -> a -> Tup a
pattern (x :? y) <- T x (sqrt->y)
匹配T x y
,但y平方根。这样:
let (_ :? y) = T 1 4 in y
是
2.0
我也希望能够使用:?
作为构造函数,因此我可以做一些很酷的事情:
1 :? 2
评估
T 1.0 4.0
当然我必须手动指定同构,但有没有任何语法或语言功能可以让我得到这种行为?
答案 0 :(得分:8)
从GHC 7.10开始,您可以使用
class Foo < AbstractModel
end
我主要担心的是pattern (:?) :: () => Floating a => a -> a -> Tup a
pattern (x :? y) <- T x (sqrt->y) where
x :? y = T x (y^2)
和sqrt
并不是完全相反的,因为负数不具有真正的平方根,因为浮点运算是不精确的。