可能重复: What is going on with the types in this ghci session? 要尝试和实践了一下Haskell语言和了解自由,我与玩弄点一个函数来平方数 所以我开始定义 >let dup f x = f x x
,所以我可以改写DUP方面平方米(不担心做DUP点免费现在) >let sq x = dup (*) x
和检查平方米的类型我看到我期待看
当我进入GHCI命令:t我看到的多态类型: ghci> :t 42
42 :: Num t => t
ghci> :t div
div :: Integral a => a -> a -> a
但经过我实际评估这些功能我看到的类型默认规则的结果。根据Haskell报告和/或ghc实现应用类型违约规则后,有没有一些命令或能力可以在ghci中观察如何更改类型?
在翻译工作时,它往往是方便的功能结合到一个名称,例如: ghci> let f = (+1)
ghci> f 1
2
这个别名的名称f的功能(+1)。简单。 但是,这并不总是奏效。我找到一个导致错误的例子,试图从Data.List模块中别名nub。例如, ghci> :m Data.List
ghci> nub [1,2,2,3,3,3]
[1,2,3]
ghci> let f =
我想在Haskell写一个小游戏,并且有相当数量的状态需要传递。我想尝试隐藏状态monad 现在我遇到了一个问题:功能,采取国家和一个参数很容易写入工作在状态单子。但也有一些函数只是将状态作为参数(并返回一个修改的状态,或者可能是其他的)。 在我的代码的一部分,我有这样一行: let player = getCurrentPlayer state
我想它不会采取状态,而不是写 player <
我在Haskell写了一个简单的(情节较轻)素数生成器,具有相互递归定义,生成素数和确定数量的primeness: primes :: (Integral a) => [a]
primes = 2 : filter isPrime [3, 5..]
isPrime :: (Integral a) => a -> Bool
isPrime m = all (indiv m) (takeWhi
,我有以下数据类型: {-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE ExtendedDefaultRules #-}
class ToString a where
data M = forall a. (ToString a) => B a
在GHCI我可以做以下的,没有任何问题: let bs = [B, B] 但是
我开始Haskell ...我尝试以两种不同的方式编写以下平凡函数,让Haskell决定类型,并且类型系统在每个函数中执行一些不同的操作案件。这种行为的解释是什么? Prelude> let f x = 2 * x
Prelude> let g = (2*)
Prelude> :info f
f :: Num a => a -> a -- Defined at <interactive>:1