如果我有一个MultiParamTypeClass,说Dictionary a k v(无论什么,它的类型是什么* -> * -> *),我想为列表(即[(k,v)])创建一个实例,这可能吗?
我得知编译器抱怨这[(k,v)]只是一种,*但有可能使这个列表(在这个例子中是一个关联列表)表现得像Pair k v但仍然能够使用Haskell的列表类型?
在代码中,
class Dictionary a where
method :: Thing k v -> a k v
Run Code Online (Sandbox Code Playgroud)
我想形成
instance Dictionary [(k,v)] where
method = ...
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?我意识到有OverloadedLists扩展,但我想要的东西比文字更有效.
也许您可以将类型类更改为完全应用的字典类型,而不是类型构造函数* -> * -> *:
{-# LANGUAGE TypeFamilies, FlexibleInstances #-}
class Dictionary d where
type Key d :: Type
type Value d :: Type
f :: Thing (Key d) (Value d) -> d
instance Dictionary [(k, v)] where
type Key [(k, v)] = k
type Value [(k, v)] = v
f = ...
instance Dictionary (Map k v) where
type Key (Map k v) = k
type Value (Map k v) = v
f = ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |