- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 UndecidableInstances
我无法弄清楚如何避免使用 newtype
的问题.这是我最初的:
{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
class Record r where
key :: r -> String
class (Record r) => SizedRecord r where
size :: r -> Int
class Database d where
type DBRecord d
class (Record a) => Agent a where
agentId :: a -> String
agentId = key
class (Database (UAgentDB u), Agent (UAgent u), Record (UAgent u))
=> Universe u where
type UAgent u
type UAgentDB u
-- plus other stuff
data SimpleUniverse d = SimpleUniverse
{
suDB :: d
-- plus other stuff
} deriving (Show, Eq)
instance (Record (DBRecord d)) => Universe (SimpleUniverse d) where -- line 28
type UAgent (SimpleUniverse d) = DBRecord d
type UAgentDB (SimpleUniverse d) = d
-- plus other stuff
amy9.hs:28:10:
Constraint is no smaller than the instance head
in the constraint: Record (DBRecord d)
(Use -XUndecidableInstances to permit this)
In the instance declaration for `Universe (SimpleUniverse d)'
UndecidableInstances
因为这段代码将在一个可重用的库中,所以我尝试声明一个
newtype
:
newtype SimpleUniverse2 u = SimpleUniverse2 { fromAdditiveGroup :: u }
instance (Record (DBRecord u)) => Universe (SimpleUniverse2 u) where
type UAgent (SimpleUniverse2 u) = DBRecord u
type UAgentDB (SimpleUniverse2 u) = u
-- plus other stuff
UndecidableInstances
上其他问题的答案,但我无法解决这个问题。
最佳答案
作为一个可怕的组合,双重包装和使用FlexibleInstances
似乎可以解决问题:
import Control.Monad.Identity
instance (Database u, Agent (DBRecord u), Record (DBRecord u)) =>
Universe (Identity (Identity u)) where
type UAgent (Identity (Identity u)) = DBRecord u
type UAgentDB (Identity (Identity u)) = u
关于haskell - UndecidableInstances 和 newtypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216619/
这个问题在这里已经有了答案: Casting vs using the 'as' keyword in the CLR (18 个答案) 关闭 2 年前。 这两个转换之间究竟有什么区别? SomeC
如何将 newtype 转换为 Int,反之亦然? 我尝试过: newtype NT1 = NT1 Integer fromNT1toInt :: NT1 -> Int fromNT1toInt x
真实世界的haskell 说: we will hide the details of our parser type using a newtype declaration 我不明白我们如何使用新类
我想定义一种“理想”类型,它是一个列表,但有一些结构。数字前奏已经定义了 Ring 的实例对于列表,但他们没有使用我想要的加法和乘法的定义。所以我认为在这种情况下我应该说 newtype Ideal
我正在用 SAT 做一些事情,我想要同时有“and”和“or”子句。 type AndClause = [Literal] type OrClause = [Literal] 但是我在使用它们时遇到
给定以下新类型: newtype Bar a = Bar { biz::Int -> Int -> Int } 是否可以对 Int -> Int 参数进行模式匹配? 例如,假设我想在 Bar 上对 m
我正在尝试理解 newtype 并认为这会起作用: module NT where newtype X = X Double newtype Y = Y Double doit :: X -> Y -
考虑以下代码示例,它创建了一个新类型来表示客户模型: module Main where import Effect (Effect) import Effect.Console ( logShow
假设我有这个新类型: newtype SomeType a = SomeType { foo :: OtherType a } 我要确保a是可显示的(属于类型类 Show x )。 我如何确保? (这
我有一个类型 class IntegerAsType a where value :: a -> Integer data T5 instance IntegerAsType T5 where v
Learn You a Haskell讨论 newtype . 它的签名如何Pair b a意味着传入的参数必须是一个元组? ghci> newtype Pair b a = Pair { getPa
我有兴趣为我的 monad 转换器堆栈获得缩放功能,该功能定义如下: newtype Awesome a = Awesome (StateT AwesomeState (ExceptT B.ByteS
我创建了一个 newtype为 Maybe Int : Prelude> newtype MaybeTuple = MaybeTuple { getMaybe :: Maybe Int} Prelud
这有什么区别: INPUT_FORMAT_TYPE = NewType('INPUT_FORMAT_TYPE', Tuple[str, str, str]) 和这个 INPUT_FORMAT_TYP
我有一个 UndecidableInstances我无法弄清楚如何避免使用 newtype 的问题.这是我最初的: {-# LANGUAGE TypeFamilies, FlexibleContext
我有一个 Haskell 项目,它使用了几个 newtypes . 我想导出这些表格,因此我可以将它包含在我的文档(非黑线鳕)中,例如作为 Markdown 表。我对此并不熟悉,但通过阅读,我的计划是
通常情况下,我正在编写剥离新类型的唯一构造函数的函数,例如在以下函数中返回不是 Nothing 的第一个参数: process (Pick xs) = (\(First x) -> x) . mcon
我最近在学习 PureScript,并做了一个在屏幕上绘制立方体的小应用程序。一切顺利,我在 Main 模块的顶部定义了一些 newtype,如下所示: newtype Vec2 = Vec2
Rewrite rules可以帮助您优化程序。我想知道如果我将对象包裹在 newtype 中它们是否会起作用.众所周知,newtype不会带来性能损失,它是一个在运行时消失的编译时包装器。所以我想知道
Difference between `data` and `newtype` in Haskell还有其他几个问题解决了数据和新类型之间的一般差异。我的问题是一个非常具体的问题。如果 G是某种类型,
我是一名优秀的程序员,十分优秀!