反内射型家庭

Cli*_*ton 11 haskell type-families

让我们说我有一个内射型家庭 T

type family T a = b | b -> a
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是有一种写作方式:

type family T' = the inverse of T
Run Code Online (Sandbox Code Playgroud)

无需重复所有实例T但反过来.

这样: T (X1 a (T' a)) = a

看起来这应该工作,因为这两个TT'都射,给出一个方面,它是机械的工作出.

无论如何要写T'

Dan*_*ner 7

有了合适的扩展,可以写:

type T' b = forall a. T a ~ b => a
Run Code Online (Sandbox Code Playgroud)

例如,这是一个示例,显示您至少获得与此类型同义词的基本类型兼容性:

type family T a = b | b -> a
type instance T Int = Bool

f :: T' Bool -> Int
f x = x
Run Code Online (Sandbox Code Playgroud)