在Haskell中,可以将类型参数置于约束之下。一些已知的示例是集合c
,它暗示元素e
或镜头的类型,其中s
与a
之间以及t
与{ b
,但在类型签名中找不到。
诸如功能依赖项,类型族之类的扩展允许在类型级别更精确地表达关系。但是当它们不完全限制选项时,它们是否等同于类型级别的强制转换?
虽然我相信答案是“否”,因为值转换可能在运行时“出错”,但是类型级别“ casts”在编译时就会“出错”……但是也许这就是发生的情况,而我却没有正确对齐类型?
还是它们在价值水平上与部分函数(或关系)更相关,必须避免某些选择?