haskell - 在 main = do haskell 中调用函数
问题描述
**大家好,haskell 的新手,我想知道当我尝试在 main 中调用 play_game 函数时,究竟什么会解决这个错误。忽略守卫的下半部分,因为我只是用随机值与他们混在一起试图解决问题。
** 1:https ://i.stack.imgur.com/AS4IN.png
{-# LANGUAGE ScopedTypeVariables #-}
解决方案
您在 readLn 上的语法是错误的 - 正确的是:something <- readLn :: IO Int
您的主要功能是 IO GHC.Types.Any 类型,简而言之:IO a 但您的功能 play_games 返回类型为 (Num a) => a 的东西。do 表示法的最后一个语句必须始终是返回类型......(请记住:do 表示法只是用于 (<*>) 的语法 shugar
例如:
main = do
a <- fs
b <- as
pure (f a)
类似于:
fs <*> as
所以在你的例子中,一个糟糕的解决方案是:
main :: IO Int
main = do
putStrLn "Please input total number of games."
numGames <- readLn :: IO Int
player1 <- readLn :: IO Int
player2 <- readLn :: IO Int
print player1
print player2
return $ play_games player1 player2 numGames (0,0)
play_games :: (Eq a1, Eq a2, Num a1, Num a2, Num a3) => a1 -> a2 -> p -> (a4, a3) -> a3
play_games player1 player2 numGames score
| player1 == 0&& player2 == 1 = snd score + 1
推荐阅读
- python - 如何将笔记本的每个选项卡作为一个单独的实体?
- swift - 如何防止在 ScrollView 中禁用按钮
- python - 将 python 代码连接到 PCF MYSQL 服务实例
- cpu-architecture - CPI与时钟频率有关吗?
- postgresql - 在 PostgreSQL 11.0 中递归比较多列中的子字符串
- java - 将 spring-boot 1.2.2 迁移到 spring-boot 2.0.3
- c# - 将WPF中的窗口设置为右下角
- regex - 正则表达式,将字符串拆分为数组 vb.net
- swift - SwiftUI - 使用 var 引用创建布局时出错
- installation - 安装 PHP 7.4 遇到“未满足的依赖项”,如何解决?