繁体   English   中英

在地图缩小期间无法从上下文(Ord k2)推论(k2〜k4)

[英]Could not deduce (k2 ~ k4) from the context (Ord k2) during map reduce

我正在使用haskell进行map reduce,并获得了一些开始的代码,但是却遇到了一些我不了解该格式的编译器错误:

无法从上下文(Ord k2)推论(k2〜k4)

这是代码:

import Data.Map (Map,empty,insertWith,mapWithKey,filterWithKey,toList)


mapReduce :: forall k1 k2 v1 v2 v3. Ord k2
            => (k1 -> v1 -> [(k2,v2)])
            -> (k2 -> [v2] -> Maybe v3)
            -> Map k1 v1
            -> Map k2 v3

mapReduce mAP rEDUCE = reducePerKey . groupByKey . mapPerKey
    where
        mapPerKey :: Map k1 v1 -> [(k2,v2)]
        mapPerKey = 
            concat 
          . map (uncurry mAP)
          . toList

        groupByKey :: [(k2,v2)] -> Map k2 [v2]
        groupByKey = foldl insert empty
            where
                insert dict (k2,v2) = insertWith (++) k2 [v2] dict

        reducePerKey :: Map k2 [v2] -> Map k2 v3
        reducePerKey = 
            mapWithKey unJust 
          . filterWithKey isJust
          . mapWithKey rEDUCE
            where
                isJust k (Just v) = True
                isJust k Nothing  = False
                unJust k (Just v) = v

谢谢您的帮助!

正如NathanHowell及其替代者所说,重要的是您发布实际的代码,错误和命令以进行编译或解释。 在这种情况下,您正在使用Glasgow Haskell,并且似乎在尝试使用ScopedTypeVariables扩展的功能,但实际上并未启用该扩展。

只需包括:

{-# LANGUAGE ScopedTypeVariables #-}

在源文件的顶部,或在命令行中使用-XScopedTypeVariables ,一切正常。 如果没有作用域类型变量,则k2的内部类型var(用于reducePerKey和groupByKey的变量)与针对mapReduce函数的k2变量不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM