首页 文章
  • 2 votes
     answers
     views

    哈斯克尔:如何度过'no instance for'?

    我正在学习Haskell . 我在this book的第8章 . 到目前为止我学到的主要内容是Haskell对我非常不友好,它尽可能地咬我的屁股 . 而且......哎呀!足够的哀悼,对企业 . 这是代码: module GlobRegex ( globToRegex, matchesGlob ) where import Text.Regex.Posix import Text.Reg...
  • 79 votes
     answers
     views

    Haskell中的孤立实例

    使用 -Wall 选项编译我的Haskell应用程序时,GHC会抱怨孤立的实例,例如: Publisher.hs:45:9: Warning: orphan instance: instance ToSElem Result 类型类 ToSElem 不是我的,它由HStringTemplate定义 . 现在我知道如何解决这个问题(将实例声明移动到声明Result的模块中),我知道why ...
  • 1 votes
     answers
     views

    Haskell Typeclasses:我在这里做错了什么?

    Haskell全新并尝试编写解析器 . 我已经使用attoparsec成功地将我的输入文件切换成令牌到AST . 我现在想要走AST并从中发出输出 . 我想我可以通过从类型类派生一些通用例程到Token类,然后在实例中根据Token类型发出代码的需要提供特定函数来实现 . 代码可能比我的解释更容易理解 . 这是我试过的: class AST a where children :: a -&gt...
  • 9 votes
     answers
     views

    使用类型类约束将函数转换为采用显式类型类字典的函数

    众所周知,实现Haskell类型类的一种方法是通过'类型类词典' . (这当然是ghc中的实现,尽管我强制要求其他实现是可能的 . )为了解决这个问题,我将简要介绍一下这是如何工作的 . 类声明就像 class (MyClass t) where test1 :: t -> t -> t test2 :: t -> String test3 :: t 可以机械地转...
  • 4 votes
     answers
     views

    为什么这个类型类只用“-XNoMonomorphismRestriction”编译?

    我一直在得到一些奇怪的类型类错误,形式为“没有实例(测试a0)来自表达式类型签名” . 这是我能提出的最简单的违规代码版本: class Test a where test :: a foo = test 添加类型没有帮助: foo = test :: Test a => a 但是,添加Test实例会使其编译: instance Test Int where test = 0 ...
  • 1 votes
     answers
     views

    与复杂的Haskell类型类声明混淆

    我有monad变换器堆栈的类型别名: type KStat s a = ReaderT (KStatRoot s) (ExceptT KindError (ST s)) a 我需要将用户从这种类型中抽象出来,主要是因为 KStatRoot 结构导致了循环依赖 . 因此我创建了一个单独的模块并为它定义了一个类型类: class (Monad (m s), MonadError KindError ...
  • 1 votes
     answers
     views

    可以在Haskell实例声明中组合类型吗?

    我编写了一个Haskell类型类,使用 (a -> m _) 形式的类型来声明它的实例会很方便,其中 m 是 (* -> *) 类型,例如monad,而 _ 是一个要保持不饱和的槽 . 我知道怎么写 newtype X a m b = X (a -> m b) ,并为 X a m 声明一个实例 . 但我正在寻找的是使用裸露的,未包装的 -> 类型,如果可能的话 . 如果想要...
  • 3 votes
     answers
     views

    Haskell:Algebric数据类型,其类型变量需要是类型类的实例

    我试图定义一个代数类型: data MyType t = MyType t 并使它成为Show的一个实例: instance Show (MyType t) where show (MyType x) = "MyType: " ++ (show x) GHC抱怨因为它不能推断'Show(MyType t)'中的类型't'实际上是Show的实例,这是(show x)所需要...
  • 4 votes
     answers
     views

    使用常量值退化类型类实例声明

    我已将所有内容减少到必需品,所以如果下面的示例代码是设计的,请耐心等待 . 假设我们有: class Foo a where foo :: a data Type a = Type a instance (Foo a) => Foo (Type a) where foo = Type foo 现在,假设我想让 Type a 为 Show 的实例,只要 a 是 Foo 和...
  • 4 votes
     answers
     views

    使类型类实例自动成为另一个的实例

    我想要实现的是以下类的任何实例( SampleSpace )应该自动成为 Show 的实例,因为 SampleSpace 包含创建String表示所需的整个接口,因此该类的所有可能实例几乎相同 . {-# LANGUAGE FlexibleInstances #-} import Data.Ratio (Rational) ...
  • 1 votes
     answers
     views

    额外模块中不常见的类型类的实例声明

    将非常规类型类的实例声明放在额外的模块中是不是很好的风格? 作为一个例子,我有这种简单的树类型: module Data.Tree where data Tree a = Leaf a | Node (Tree a) (Tree a) 假设我想使用QuickCheck的 Arbitrary 类型类来生成 Tree 类型的随机值(并且不仅可以在测试中使用它们) . 什么是...
  • 2 votes
     answers
     views

    声明类型类的列表实例

    我正在通过UPENN Haskell lecture notes学习Haskell类型类,使用示例代码创建自己的类型类: class Listable a where toList :: a -> [Int] instance Listable Int where toList x = [x] instance Listable Bool where toList...
  • 0 votes
     answers
     views

    如何为我自己的类型类中的所有类型声明类型类的实例(如Show)?

    我有一个类型类: class Wrapper w where open :: w -> Map String Int close :: Map String Int -> w 它看起来不是很有用,但是我用它来强烈地(不仅仅是 type 同义词)区分语义上不同的 Map String Int : newtype FlapMap = Flap (Map String In...
  • 3 votes
     answers
     views

    Haskell通用类型类与列表

    我有一个这样定义的类,所以 foo 采用泛型类型并返回一个Integer: class Foo a where foo :: a -> Integer 并定义了几个实例,以便它可以与 Bool 和 Char 类型一起使用: instance Foo Bool where foo _ = 10 instance Foo Char where foo _ = 20 如果我现在想...
  • 9 votes
     answers
     views

    Clojure - 返回类型的派遣? (与Haskell Typeclasses一样富有表现力)

    这是关于Clojure与其他语言(如Haskell)的表现力的问题 . 更广泛的问题是Expression Problem的解决方案 This question得出的结论是,一般来说,Clojure协议(和多方法)的表达力要低于Haskell类型类,因为协议在第一个参数上调度,而Haskell类型类可以在返回类型上调度 . (现在我认为这种推理非常有趣,并且没有兴趣开始语言大战 . 我只是对思想...
  • 1 votes
     answers
     views

    实例化时Haskell“冲突的定义”

    我正在研究一个Haskell光线跟踪器 . 我有以下相机类型: data Cameras = Ortographic | Pinhole { d :: Float, zoom :: Float, eye, lookAt, up :: Vector, cu, cv, cw :: Vector } deriving (Show) 以下Camera-typeclass:...
  • 13 votes
     answers
     views

    Scala:类型类和ADT之间的区别?

    类型类和抽象数据类型之间有什么区别? 我意识到这对于Haskell程序员来说是一个基本的东西,但我来自Scala背景,并且会对Scala中的示例感兴趣 . 我现在能找到的最好的是类型类是“开放的”而ADT是“封闭的” . 将类型类与结构类型进行比较和对比也是有帮助的 .
  • 5 votes
     answers
     views

    Set类的位置在哪里?

    在Haskell中,Data.Set实现了一个具体的集合类型 . 正常 [] 列表还实现了一组的所有操作(在Data.List中) . 但似乎没有他们都实现的预定义的 Set 类型类 . 你可以自己实现一个: {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FunctionalDependencies #-} module Set w...
  • 3 votes
     answers
     views

    Haskell类型参数类型

    我想定义一个特定的仿函数如下: {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} data ValOrError a b = Val a | Error b class MF c a b where mcons :: a -> c -> c merr :: b -> c ...
  • 2 votes
     answers
     views

    在Haskell中创建许多类似的newtypes / typeclass实例

    我是Haskell的初学者,并试图了解类型类和类型 . 我有以下示例(代表我正在研究的代数中的一个真正问题),其中我定义了一个只包装Num实例的类型,以及一个定义二进制操作 baz 的类型类 . newtype Foo i = B i deriving (Eq, Ord, Show) class Bar k where baz :: k -> k -> k instance...
  • 88 votes
     answers
     views

    Java 's Interface and Haskell'的类型类:差异和相似之处?

    当我正在学习Haskell时,我注意到它的 type class ,这应该是一个源自Haskell的伟大发明 . 但是,在the Wikipedia page on type class: 程序员通过指定一组函数或常量名称以及它们各自的类型来定义类型类,这些类型必须存在于属于该类的每个类型 . 这似乎与 Java's Interface 相当接近(引用Wikipedia's Interface...
  • 55 votes
     answers
     views

    OOP接口和FP类型类之间的区别[重复]

    可能重复:Java的接口和Haskell的类型类:差异和相似之处? 当我开始学习Haskell时,我被告知类型类与接口不同且功能更强大 . 一年后,我广泛使用了接口和类型,我还没有看到它们如何不同的示例或解释 . 这不是一种自然而然的启示,或者我错过了一些明显的东西,或者实际上没有真正的区别 . 搜索互联网并没有发现任何实质性内容 . 那么,你有答案吗?
  • 1 votes
     answers
     views

    Haskell类型别名和模块重新导出

    我现在是'm struggling with Haskell'的类型类 . 我正在使用语言扩展名 {-# LANGUAGE ConstraintKinds #-} 为类型类提供类型别名 . 包含类型类的模块看起来像这样: module Foo.Bar.Class ( C (..) ) where class C a where foo :: a 现在我想隐藏类型类的内部定义并公开类型类的更...
  • 3 votes
     answers
     views

    在Haskell中表示类型类的任意实现

    我正在尝试克服多年在经典Java风格的继承模型中工作,以真正适应Haskell . 它进展不顺利,我需要一些帮助 . 假设我有一个类型类 Foo . 我想表示 Foo 的任意实现类的列表,但不是以限制列表中的每个项目相同的方式;我需要一个异构的开放类型,所以我的库的消费者可以实现自己的 Foo . 原因是因为我想写下面的内容(pidgin Haskell): class Foo -- some...
  • 3 votes
     answers
     views

    Haskell类型类和重复行为

    我是Haskell的新手并尝试在程序中概括一些行为,以减少代码量并整体提供更简单的解决方案 . 假设我有这种类型代表邮政编码,例如'ABC 123': type PostCode = ((Char, Char, Char), (Int, Int, Int)) 并且 PostCode 的行为应该是循环的;即 AAA 000 来自 AAA 001 ; 'A'至'Z'对于 Char 应该是说唱回合,对...
  • 2 votes
     answers
     views

    定义自定义“读取”功能时出现“Ambigous type variable”错误

    在尝试编译以下代码时,这是来自Safe包的readMay上的read build的增强版本 . readI :: (Typeable a, Read a) => String -> a readI str = case readMay str of Just x -> x Nothing -> error (&q...
  • 2 votes
     answers
     views

    Haskell简单声明中的歧义类型

    我想简单地添加3.5楼3.5但是会出现这样的错误:约束中的模糊类型变量't':'Fractional t'来自文字'3.5'......'积分t'来自使用楼层...... 如何解决这个问题?
  • 1 votes
     answers
     views

    使用foldr的Haskell Type类

    我使用foldr编写了一个函数来确定列表或字符串的长度 . 我有点困惑为什么Haskell确定类型类是Num . 当然字符串不包括在这个类中?但是Haskell坚持认为必须这样,否则函数将无效 . 有人可以帮助澄清这是为什么吗? myLength' :: (Num a) => [a] -> Int myLength' xs = foldr (\x acc -> 1 + acc) ...
  • 0 votes
     answers
     views

    没有观察到更高的金属类型

    我正在做一些看起来应该相当简单的事情:尝试实现为具有两个类型参数的集合定义的类型类,使用较高级的类型作为类型类的类型参数 . 这里值得注意的复杂性是集合类型上有一个类型绑定 . 我希望在类型类实现体中,scala编译器应该能够根据提供的类型类型参数推断出方法的返回类型......也许这在代码中会更清楚: import language.higherKinds class BaseDemo[T...
  • 3 votes
     answers
     views

    scala类型类具有更高的kinded类型和方差

    我有一个与此非常类似的问题:Scala higher kinded type variance 然而,这有点不同,嗯,它不编译(scala 2.11.8) . 基本思想是采用"things"提供的数组 . 如果数组为null,则返回某种类型的默认值(例如 Boolean , Option , List[Int] ),否则请对数组进行处理并生成结果 . 结果和默认值具有相同的类型...

热门问题