Haskell 没有由文字'1';如果

Haskell 没有由文字'1';如果,haskell,Haskell,考虑下一段代码- pvp :: Board -> Int -> IO () pvp board player = do playerchoice <- prompt $ ("Player " ++ (show (player + 1)) ++ ", it's your turn:") let newboard = if player == 0 then put board X (read playerchoice)

考虑下一段代码-

pvp :: Board -> Int -> IO ()
pvp board player = do
  playerchoice <- prompt $ ("Player " ++  (show (player + 1)) ++ ", it's your turn:")
  let newboard = if player == 0
                   then put board X (read playerchoice)
                   else put board O (read playerchoice)
  case newboard of
      Nothing -> do
        putStrLn "Invalid move."
        pvp board player
      Just board' -> putStrLn "Valid move."
这就是我所说的pvp-

main = do
  playGame emptyBoard
  where
    playGame board = do 
      game_choise   <- prompt "Choose game type: (1) PvC (2) PvP"
      if game_choise == 1
        then putStrLn "1"
        else pvp board 0
main=do
游戏空板
哪里
玩游戏板
游戏选择我最可能的解决方法(猜测)是

main = do
  playGame emptyBoard
  where
    playGame board = do 
      game_choise <- prompt "Choose game type: (1) PvC (2) PvP"
      if read game_choise == (1 :: Int)
        then putStrLn "1"
        else pvp board 0
main=do
游戏空板
哪里
玩游戏板

游戏选择正如我在对my的评论中提到的-您需要包括
放置
提示
的定义,以提供一些上下文。您查看的代码部分不正确。错误消息与您包含的代码不匹配。或者
如果game_choise==“1”
,我猜这会“更安全”,另一方面,它可能会导致意外的运行时行为-因为我不知道prompt是否返回包含换行符的字符串。我会做一些类似于
case readMay gameChoice of Just(1::Int)->
main = do
  playGame emptyBoard
  where
    playGame board = do 
      game_choise <- prompt "Choose game type: (1) PvC (2) PvP"
      if read game_choise == (1 :: Int)
        then putStrLn "1"
        else pvp board 0