基于规范视图的Haskell Typeclass实例

时间:2015-03-01 21:32:07

标签: haskell

作为一种自我分配的练习,我正在努力实现基于代数的数字类型层次。

我想指出,如果一个结构可以以规范的方式被视为满足我的一个类型类的东西,那么它也应该是该类型类的一个实例。为此,我基本上尝试了以下方法:

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies,
               FlexibleContexts, FlexibleInstances #-}
class AbGp s a where
  plus :: a -> a -> s -> a
  zero :: s -> a
  minus :: a -> a -> s -> a
class View a b c | a c -> b
  view :: a -> b
instance (View s s1 a, AbGp s1 a) => AbGp s a
  plus x y s = plus x y (view s)
  zero = zero . view
  minus x y s = minus x y (view s)

s应该被视为持有组中操作的定义,a作为组中元素的类型。

但这不起作用,这并不令人惊讶,但我现在要做的是: 假设我知道某些类型s,比如表示s的{​​{1}},可以规范地映射到Ring,这是一个数据结构我已经有一个实例作为{ {1}},然后我希望s1也自动成为AbGp的实例。我怎么能这样做?

我想要做以下事情,如果它可以工作,但我想知道是否有更好的方法:

s

0 个答案:

没有答案