gpt4 book ai didi

haskell - 解决重载函数的歧义

转载 作者:行者123 更新时间:2023-12-02 16:13:42 25 4
gpt4 key购买 nike

我想在 Haskell 中有一个重载函数。

{-# LANGUAGE FlexibleInstances #-}
class Foo a where
foo :: a

instance Foo (String -> Int) where
foo = length

instance Foo String where
foo = "world"

然而,这种重载对于类型歧义的处理效果非常差。 print $ foo "hello" 会导致错误,而 print $ length "hello" 则可以正常工作。然而,只要我的实例列表是固定的,就不应该有技术原因让 Haskell 无法意识到 foo::String -> a 的唯一实例是 foo : :字符串->整数。我可以让 Haskell 实现这一点吗?

最佳答案

在这种特殊情况下很容易做到。简单地说:

instance a ~ Int => Foo (String -> a) where foo = length

关于haskell - 解决重载函数的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30659780/

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