我正在尝试为“制表”编写一个定义,该函数生成给定 Map 中与给定可折叠集合中的键相对应的值的幺半群摘要。
这是我的代码:
module Foldables where
import Prelude hiding (Applicative(..), any, concat)
import Data.Foldable
import Data.Semigroup
import qualified Data.Map as Map
import Data.Map (Map)
import Data.Map.Append (AppendMap(..))
import Data.List (intersperse)
import Data.Maybe (maybe)
import Data.Monoid (Any(..), Sum(..))
import GHC.Generics (Generic)
tabulate :: (Ord k, Foldable f, Monoid a) => (v -> a) -> Map k v -> f k -> a
tabulate t m = foldMap (tabulate . k v)
我收到此错误:
src/Foldables.lhs:295:27: error:
• Data constructor not in scope: Tabulate :: b0 -> a
• Perhaps you meant variable ‘tabulate’ (line 295)
src/Foldables.lhs:295:38: error:
Variable not in scope: k :: t0 -> k -> b0
除了第二行括号中的内容外,请不要更改任何内容
更新:我想我更接近于理解这一点。这是我的新代码。我意识到它是不完整的,但它至少可以编译。
tabulate :: (Ord k, Foldable f, Monoid a) => (v -> a) -> Map k v -> f k -> a
tabulate t m = foldMap (\x -> mempty maybe [m] maybe map [t])
现在它没有通过阴谋集团测试:
Falsified (after 2 tests):
<fun>
fromList [(False,'\DC4'),(True,'\1054302')]
[True,True]
不管我做什么似乎都有一些变化
我假设如果 tabulate 的第三个参数不是空的,我需要的是某种条件?