ToZ*_*oZo 2 haskell types constraints synonym
我知道我可以为类型创建同义词,例如:
type ListToArray a e = [e] -> a Int e
Run Code Online (Sandbox Code Playgroud)
我还读到约束类型仍然是一种类型,所以我想我也可以为其创建一个同义词:
type (Data.Array.IArray.IArray a e) => ListToArray a e = [e] -> a Int e
Run Code Online (Sandbox Code Playgroud)
然而 GHC 抱怨道:
parse error on input '=>'
Run Code Online (Sandbox Code Playgroud)
GHC 是否支持约束类型的同义词?
你可以查看Haskell 2010 Report,关于类型同义词的部分指出类型同义词的语法是:
\n\ntype simpletype = type\nsimpletype \xe2\x86\x92 tycon tyvar1 \xe2\x80\xa6 tyvark (k \xe2\x89\xa5 0) \nRun Code Online (Sandbox Code Playgroud)\n\n换句话说:不,你不能将类约束放在 a 的=左侧type的左侧。
另请注意,即使在此类声明中的右侧,也不能有类约束=。的定义type是:
type \xe2\x86\x92 btype [-> type] (function type)\n\nbtype \xe2\x86\x92 [btype] atype (type application)\n\natype \xe2\x86\x92 gtycon\n | tyvar\n | ( type1 , \xe2\x80\xa6 , typek ) (tuple type, k \xe2\x89\xa5 2)\n | [ type ] (list type)\n | ( type ) (parenthesised constructor)\n\ngtycon \xe2\x86\x92 qtycon\n | () (unit type)\n | [] (list constructor)\n | (->) (function constructor)\n | (,{,}) (tupling constructors) \nRun Code Online (Sandbox Code Playgroud)\n\n所以type非终结符指的是没有上下文的类型类型。换句话说:不,你不能在类型同义词中拥有上下文,至少在一般情况下不能。
GHC 对 Haskell 的类型系统有很多扩展,可以在某些情况下解除上述一些限制(请参阅此)。但是,据我所知,没有一个能够完全实现您想要的。
\n| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |