相关疑难解决方法(0)

GHC重写规则专门用于类型类的函数

使用GHC RULES编译指示,可以为特定类型专门化多态函数.Haskell报告中的示例:

genericLookup :: Ord a => Table a b   -> a   -> b
intLookup     ::          Table Int b -> Int -> b

{-# RULES "genericLookup/Int" genericLookup = intLookup #-}
Run Code Online (Sandbox Code Playgroud)

这将使GHC intLookup在整数索引表和通用版本上使用,否则intLookup可能会更高效.

我想用类似下面的(略微简化的)函数来完成类似的事情:

lookup    :: Eq a  => [(a, b)] -> a -> b
lookupOrd :: Ord a => [(a, b)] -> a -> b
Run Code Online (Sandbox Code Playgroud)

其中从输入列表lookupOrd创建一个Map然后使用Map.lookup,这需要a成为其成员Ord.

现在我想告诉GHC lookupOrd应该使用而不是lookup什么时候a确实是Ord类型类的成员.但是,以下规则并未进行类型检查: …

haskell ghc

14
推荐指数
2
解决办法
627
查看次数

标签 统计

ghc ×1

haskell ×1