小编Bab*_*san的帖子

函数名的别名具有不同的类型签名.为什么?

import Data.List (genericLength)

len = genericLength

:t genericLength
genericLength :: (Num i) => [b] -> i
:t len
len :: [b] -> Integer
Run Code Online (Sandbox Code Playgroud)

为什么类型len不同genericLength?这里的目的是使用更短的别名genericLength.

haskell中的功能不是一流的吗?不应该为功能结果赋予相同功能的其他名称吗?

haskell types

12
推荐指数
1
解决办法
1232
查看次数

如何通过隐藏"状态"更改来在类型sig中编写没有IO的haskell函数

我在haskell中编写了一个函数,它接受一些参数,如Word32,String(忽略currying)并输出IO Word32.现在,这是一个真正意义上的函数:对于相同的输入,输出将始终相同.没有副作用.函数返回IO Word32而不是Word32的原因是该函数在循环中多次更新许多32位线性反馈移位寄存器(lfsr)和其他寄存器,以便计算最终的Word32输出.

我的问题是:鉴于此函数实际上没有副作用,是否可以在函数实现中隐藏这些寄存器更新,以便该函数返回Word32而不是IO Word32?如果是这样,怎么样?

monads haskell functional-programming referential-transparency unsafe-perform-io

7
推荐指数
2
解决办法
725
查看次数

Haskell:为什么GHC推断主方法的类型不完全?

例如,使用Don Stewart编写的代码回复一些Stack Overflow问题:

import Control.Monad
import qualified Data.HashTable as H
import System.Environment

main = do
  [size] <- fmap (fmap read) getArgs
  m <- H.new (==) H.hashInt
  forM_ [1..size] $ \n -> H.insert m n n
  v <- H.lookup m 100
  print v
Run Code Online (Sandbox Code Playgroud)

将其加载到GHCi中.

:t getArgs ---> getArgs :: IO [String]
:t main    ---> main :: IO ()
Run Code Online (Sandbox Code Playgroud)

为什么main的类型签名没有反映出getArgs :: IO [String]被调用的事实?

运行二进制文件时,您可以给出一个参数. <prog> 145返回Just 100 但是在GHCi中,你不能:main 145给出错误.你如何在GHCi中运行这个程序并给出一个参数.

haskell type-inference ghci

3
推荐指数
1
解决办法
679
查看次数