Haskell 我如何接受用户输入并基于它们调用函数?

Haskell 我如何接受用户输入并基于它们调用函数?,haskell,Haskell,如您所见,我有一个函数makeGrid。我想在StartName中获取用户输入,并根据用户输入调用makeGrid。如果可能的话,也要做一个while循环,我应该怎么做呢?|这里的语法不正确。试试看。。。然后在Haskell中,人们通常将事物分解成函数。因此,您可能有一个parseDestiony函数,它从字符串注释到字符串的双引号和字符的单引号,比如“1”,再到可能很难做到的“justEasy”。这可能是通过ReadOfficity::IO Officity`函数实现的,比如ReadOffic

如您所见,我有一个函数makeGrid。我想在StartName中获取用户输入,并根据用户输入调用makeGrid。如果可能的话,也要做一个while循环,我应该怎么做呢?

|这里的语法不正确。试试看。。。然后在Haskell中,人们通常将事物分解成函数。因此,您可能有一个parseDestiony函数,它从字符串注释到字符串的双引号和字符的单引号,比如“1”,再到可能很难做到的“justEasy”。这可能是通过ReadOfficity::IO Officity`函数实现的,比如ReadOfficity=putStrLn“Officiency?”>>fmap ParseOfficiency getLine>=\d->case d of Just d->return d;没有什么困难。请注意,这还演示了如何重复IO操作。如果要在do中执行大小写,则需要一个大小写。还需要缩进do块的内容。|难度=='1'=不是正确的语法。试试看。。。然后在Haskell中,人们通常将事物分解成函数。因此,您可能有一个parseDestiony函数,它从字符串注释到字符串的双引号和字符的单引号,比如“1”,再到可能很难做到的“justEasy”。这可能是通过ReadOfficity::IO Officity`函数实现的,比如ReadOfficity=putStrLn“Officiency?”>>fmap ParseOfficiency getLine>=\d->case d of Just d->return d;没有什么困难。请注意,这还演示了如何重复IO操作。如果你想在do中执行case,你需要一个case。你还需要缩进do块的内容。这很有意义,但给出了一个错误:“do”块中的最后一个语句必须是网格上的表达式是的,你没有将游戏代码放在它所在的位置。它抱怨您没有使用网格。对于测试,您可以在那里使用打印网格。这很有意义,但给出了一个错误:“do”块中的最后一个语句必须是网格中的表达式是的,您没有将游戏代码放在它所在的位置。它抱怨您没有使用网格。对于测试,您可以在那里使用打印网格。
import System.IO

makeGrid :: Int -> Int -> a -> [[a]]
makeGrid x y = replicate y . replicate x

startGame = do
putStrLn "Select a difficulty (1,2): "
difficulty <- getLine
|difficulty == '1' = makeGrid 3 3 False
|difficulty == '2' = makeGrid 5 5 False
|otherwise = putStrln "Wrong thing"
             some function            --start from beginning again
{-# LANGUAGE LambdaCase #-}

import System.IO

playGame = do
  grid <- initializeGrid
  -- game code goes here

initializeGrid = do
  putStrLn "Select a difficulty (1,2): "
  getLine >>= \case -- "difficulty <- getLine" <newline> "case difficulty of" also ok
    "1" -> return $ makeGrid 3 3 False
    "2" -> return $ makeGrid 5 5 False
    _   -> do
      putStrln "Wrong thing"
      initializeGrid

makeGrid :: Int -> Int -> a -> [[a]]
makeGrid x y = replicate y . replicate x