- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我现在正在玩 Monoids 并想定义我的 <>
实例和 mempty
一个列表。我写了这个:
instance Semigroup [a] where
(<>) = (++)
instance Monoid [a] where
mempty = []
但出现错误:
Duplicate instance declarations:
instance Monoid [a] -- Defined at newtype.hs:25:10
instance Monoid [a] -- Defined in ‘GHC.Base’
可能,我需要在文件开头添加:
import Prelude hiding (???)
我应该用什么来代替“???”?
最佳答案
Instance declarations cannot be explicitly named on import or export lists. All instances in scope within a module are always exported and any import brings all instances in from the imported module. Thus, an instance declaration is in scope if and only if a chain of import declarations leads to the module containing the instance declaration.
因此不可能排除某个实例。也就是说,这里完全没有必要为列表实现 Semigroup
和 Monoid
,因为它已经定义好了。事实上,如果我们检查源代码,我们会看到 Semigroup
[src]。 :
-- | @since 4.9.0.0
instance Semigroup [a] where
<b>(<>) = (++)</b>
{-# INLINE (<>) #-}
stimes = stimesList
和Monoid
[src] :
-- | @since 2.01
instance Monoid [a] where
{-# INLINE mempty #-}
<b>mempty = []</b>
{-# INLINE mconcat #-}
mconcat xss = [x | xs <- xss, x <- xs]
所以这已经完全按照您自己实现的方式实现了。
在您没有自己实现的数据类型上实现您自己没有实现的类型类的实例通常被认为是一种反模式。这称为 orphan instance [haskell-wiki] :
An orphan instance is a type class instance for class C and type T which is neither defined in the module where C is defined nor in the module where T is defined.
通常将一个类型包装到另一个数据构造函数中(使用 newtype
)来为类型类定义该类型的不同实例。
关于haskell - 从 Prelude 隐藏实例声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58048733/
我正在寻找一个看起来与此类似的函数: withSelf :: (a -> b) -> a -> (a, b) withSelf f x = (x, f x) 我已经用 Hoogle 搜索过这样的功能;
当我想重新编译 xmonad 来更改配置时,我得到了这个: Implicit import declaration: Ambiguous module name `Prelude':
我目前正在尝试查找 words 函数的定义,以帮助了解我正在编写的类似函数。所以我想知道是否有某个地方包含 Prelude 函数的所有定义?也许是一个 GHCi 命令来显示一个的定义,或者 Haske
我现在正在玩 Monoids 并想定义我的 <> 实例和 mempty一个列表。我写了这个: instance Semigroup [a] where (<>) = (++) instance M
在一个文件中,我需要使用常规前奏 (++)运算符(operator),我也希望为 (++) 实现我自己的行为.我用过import Prelude hiding (++)在我的文件顶部,定义了我自己的
我正在测试一些喜欢将内容输出到文件的东西,它有一个中文名称。 该文件将使用正确的内容而不是文件名成功创建。 我看看函数writeFile ^1它使用 String 表示文件名. 所以我怀疑这可能是根本
我是answering a question并编写了一些代码来完成工作。 isPrime :: Int -> Bool isPrime n = primeCheck n $ floor $ sqrt
这个问题在这里已经有了答案: Why recursive `let` make space effcient? (3 个回答) 8年前关闭。 重复 is defined如下: repeat :: a
出于某种原因,它告诉我在我尝试遵循 rust 病IRC的示例时未声明它,并且没有用,这是没有意义的,因为我以前使用过这样的库,并且在此之前就可以使用了,所以idk是什么发生 代码: use futur
Haskell prelude 函数能否简化为一组核心函数,以便所有其他函数都可以根据核心集来定义?如果有,核心功能是什么? 最佳答案 我刚刚浏览了 Hackage 上的 Prelude 文档。我无法
我决定将自己的 Prelude 用于更大的项目(包含一些库和一些可执行文件)。 Prelude 不导出一些部分函数,而是导出一些常用函数(即来自 Control.Monad 等)。然而,我正在与如
这个问题已经有答案了: Why recursive `let` make space effcient? (3 个回答) 已关闭10 年前。 重复is defined如下: repeat :: a -
这个问题已经有答案了: Why does foldr use a helper function? (4 个回答) 已关闭 3 年前。 我正在研究一些前奏函数来教同事递归,我发现有些函数的编写方式相当
我无法在我的代码中弄清楚是什么函数引发了 (*** Exception: Prelude.!!: negative index 因为这个异常对错误的描述不是很清楚。有什么办法吗准确检测调用 !! 并引
我是haskell的新手,我编写了项目详细信息的代码并搜索了每个项目的详细信息。 type Code = Int type Name = String type Database = (Code,Na
在 Idris ch 的类型驱动开发中。 4,他们说 The Prelude also defines functions and notation to allow Nat to be used l
在 Emacs Prelude 中,当存在与文件名“匹配”的文件时,我不知道如何创建新文件。 在示例屏幕截图中,我试图在一个目录中创建一个名为 spawn.exs 的文件,该目录已经包含一个名为 sp
我做了一些运行: main = print $ head . drop (2^30) $ [1..] — 两者兼具 Prelude.drop和一个微不足道的 drop . Prelude 变体始终快约
我刚刚意识到我可以定义自己的 Prelude 模块并仔细控制它的导出。 这被认为是不好的做法吗? 优点: 无需在大型项目中重复导入“通用”模块。 无需写“导入前奏隐藏(catch)”。 最佳答案 一般
我的代码抛出空列表错误。当我运行时: makeAgent :: Agent -> [Agent] -> Agent makeAgent (Agent func n _) agents = (Agent
我是一名优秀的程序员,十分优秀!