Haskell apply function arrow to only result type?
在Haskell中是否可以仅将函数箭头类型构造函数(->)应用于其右侧类型(例如:(-> a))以获得类型*-> *的类型构造函数?
不,目前不可能。 Haskell的类型系统存在某些局限性,使其在大多数情况下都非常有用和方便,这就是这些局限性之一。最好的选择是使用新类型。
1 | newtype FuncFlip r a = FuncFlip { unFuncFlip :: a -> r } |
Newtypes只是简单的标记,可帮助编译器知道如何进行类型检查并正确执行类型定向的调度(类型类)。大概您想翻转类型参数以提供一些typeclass实例。这仅意味着,只要要使用该类型类的函数,就必须用
您可以为此创建一个Newtype实例,这可能会或可能不会为您带来方便。
1 2 3 | instance Newtype (FuncFlip r a) (a -> r) where pack = FuncFlip unpack = unFuncFlip |
进一步阅读:是否有"类型级别组合"?