36得票3回答
理解 Haskell 类型签名

我正在自学Haskell,想了解以下类型签名: Prelude> :t ($) ($) :: (a -> b) -> a -> b Prelude> 我应该如何理解(无意冒犯)这个? 一个类似的结果也令人困惑: Prelude> :t map ma...

32得票1回答
Haskell类型签名含有多个类约束

我如何有多个类约束,以便如果A是Eq且B是Num,我可以说f :: Eq a => a -> b` 或者f :: Num b => a -> b 那么,我怎样才能同时拥有Eq a =>和Num b =>? f :: Eq a => Num b =&...

29得票5回答
Haskell中的函数签名重载

当我编译代码时,出现以下错误消息: 重复的类型签名: weightedMedian.hs:71:0-39: findVal :: [ValPair] -> Double -> Double weightedMedian.hs:68:0-36: findVal :: [ValPa...

25得票2回答
为什么两个相似的函数定义中as-pattern推断类型的差异如此之大?

我有以下两个类似的函数定义: left f (Left x) = Left (f x) left _ (Right x) = Right x left' f (Left x) = Left (f x) left' _ r@(Right _) = r 当我检查这两个函数的类型签名时,我对...

25得票1回答
在类型签名中,#(井号/井字号)代表什么意思?

在类型签名中,像 seq<#seq<'a>> 这样使用符号 # 和 seq<seq<'a>> 相比有何含义?

22得票4回答
为什么在where子句中使用类型签名如此不常见?

这样做有助于编译器进行优化吗,还是只是增加了额外的工作来添加额外的类型注释?例如,我们经常会看到:foo :: a -> b foo x = bar x where bar x = undefined 不要:foo :: a -> b foo x = bar x ...

20得票6回答
为什么在Haskell的实例声明中不能放置类型签名?

我喜欢在我的代码中为所有顶层定义添加类型签名。然而,实例声明中的类型签名似乎是不允许的,如果我添加一个,GHC就会报告“放错了类型签名”的错误。为什么会这样呢?为什么 GHC 不能检查类型签名是否与其期望的相同,并在不同的情况下拒绝(或警告)?

18得票1回答
Haskell中的类型签名u f=f.f比我想象的要强大。

我编写了以下简单的函数u f=f.f 根据 ghci 的显示,这个函数的类型为u :: (b -> b) -> b -> b 然而,那种类型签名太严格了。Haskell正在强制要求我们的输入必须是(b -> b)类型,但实际上并不一定需要这样。例如,函数(:[])的类型...

16得票1回答
理解Data.Data.Data中gfoldl的类型签名

Data 定义了它的核心函数之一 gfoldl :gfoldl :: (Data a) => (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) ...

14得票2回答
是否应该为主函数指定类型签名?为什么或为什么不?

我从《Learn You A Haskell For Great Good》的第9章中学到,按照惯例,我们通常不会为main指定类型声明。 据我所知,这种惯例很普遍。但是,如果我编译一个缺少对main类型签名的程序,例如 -- test.hs -- main :: IO () mai...