gpt4 book ai didi

scala - 字符串被视为幺半群

转载 作者:行者123 更新时间:2023-12-04 16:55:26 24 4
gpt4 key购买 nike

给出这样的签名或 that one :

def foo[A, F[_]](implicit mon: Monoid[F[A]], pr: Pure[F]): F[A]

假设 A 是 Char , 有没有办法得到一个 String而不是 List[Char] ?
String不接受类型参数,所以我认为这是不可能的。下一个最佳选择是什么?现在,我使用 mkString结果,但感觉不是最佳的。

我想 String是一个零的幺半群 ""并附加 + ...

最佳答案

可以说服 String 伪装成更高级的类型,从而允许形式为 foo 的函数适用。但是,Scala 的类型推断目前无法胜任推断工作 foo的类型参数,所以你必须明确地提供它们,

// Assuming the the definitions of Pure and Monoid from Scalaz

type ConstString = {
type λ[X] = String
}

implicit def StringPure = new Pure[ConstString#λ] {
def pure[A](a: => A) = a.toString
}

val sm = implicitly[Monoid[String]]
val sp = implicitly[Pure[ConstString#λ]]
val f : String = foo[Char, ConstString#λ](sm, sp) // OK

请注意 Char输入参数 foo未使用,可以是任何东西,但必须是东西:在这种情况下,要么 Char是自然的选择,但 NothingAny也会这样做。

请注意,此解决方案在 String 上交易的特点:所有类型的值都可以转换为 String如此 pure[A](a : => A) : String适用于所有类型 A .为 String 以外的类型复制此习语很可能必须利用某种机制来在 pure 的正文中实现特定于类型的情况。 (例如,某种模式匹配)。

关于scala - 字符串被视为幺半群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com