繁体   English   中英

输入IO的haskell说明

[英]Type in haskell explanation of IO

有人可以帮助我了解此功能类型吗? stateOfMind :: BotBrain -> IO (Phrase -> Phrase)

stateOfMind是一个函数, BotBrain只是一个类型。

type Phrase = [String]
type PhrasePair = (Phrase, Phrase)
type BotBrain = [(Phrase, [Phrase])]

如果stateOfMind具有以下类型: BotBrain -> (Phrase -> Phrase) ,则stateOfMindBotBrain作为参数来产生一个新函数,该函数接受一个Phrase并给出一个Phrase 但是现在我们有了一个IO ,即IO (Phrase -> Phrase) 这意味着什么?

randomIO具有单子类型,但为什么要那样呢? 是因为我们选择了种子吗? Monadic我通常用于输入和输出,但是随机生成器实际上在运行时没有从用户那里获得任何输入。

stateOfMind :: BotBrain -> IO (Phrase -> Phrase)

stateOfMind接受BotBrain并返回IO操作,其结果是从PhrasePhrase的函数。 IO monad中执行IO (Phrase -> Phrase)操作时,将获得普通的纯函数Phrase -> Phrase

randomIO属于IO因为它使用getStdRandom更改全局标准随机数生成器的状态。 多次调用randomIO可以(并且将)返回不同的结果,这正是IO指示的。

您可以使用mkStdGen创建一个纯生成器,并从中纯粹获取值:

let
  g1 = mkStdGen 42      -- Seed value
  (r1, g2) = random g1  -- Get first random number
  (r2, g3) = random g2  -- Get second random number
in r1 + r2

摆脱重复的一种方便方法是使用State monad:

flip evalState (mkStdGen 42) $ do
  r1 <- state random
  r2 <- state random
  return (r1 + r2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM