我一直在尝试编译一些代码。它的意思是采取 a HList
,提取字符串并将它们连接在一起。
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Lib
( y
) where
import Data.HList
data HConcat2 = HConcat2
instance ApplyAB HConcat2 (String, String) String where
applyAB _ (a,b) = a ++ b
instance ApplyAB HConcat2 (Int, String) String where
applyAB _ (_,a) = a
x :: HList '[Int, String, Int, String]
x = 3 .*. "Hello" .*. 4 .*. " World" .*. HNil
y :: String
y = hFoldr HConcat2 "Result: " x
不幸的是,当我尝试编译它时,它给了我
(ApplyAB HConcat2 ([Char], [Char]) r2) 没有实例 由使用“hFoldr”引起 类型变量“r2”不明确 注意:有一个潜在的实例可用: 实例 ApplyAB HConcat2 (String, String) 字符串 -- 定义在 src/Web/Rusalka/Condition.hs:274:10 在表达式中: hFoldr HConcat2 "结果:" x 在 'y' 的等式中: y = hFoldr HConcat2 "结果:" x
我如何说服它使用我声明的实例?