Это прекрасно работает в ghci:
printRobot (fight killerRobot gentleGiant)
Но это выдает мне ошибку «Нет экземпляра для показа», и я не могу понять, почему.
threeRoundFight a b =
(\a b -> printRobot (fight a b))
Это ошибка:
• No instance for (Show
((((t40, t50, t50) -> t50) -> t60)
-> (((t20, t10, t60) -> ((t20, t10, t60) -> t0) -> t0)
-> (([Char], a10, a0) -> [Char]) -> t30)
-> t30))
arising from a use of ‘print’
(maybe you haven't applied a function to enough arguments?)
• In the first argument of ‘print’, namely ‘it’
In a stmt of an interactive GHCi command: print it
Вот необходимые функции для рассмотрения:
fight aRobot defender = damage defender attack
where attack = if getHP aRobot > 10
then getAttack aRobot
else 0
printRobot aRobot = aRobot(\(n,a,h)->n ++ " attack:" ++ (show a) ++ " hp: " ++ (show h))
robot (name,attack,hp) = \message -> message (name,attack,hp)
Вот роботы (которые я ввел в качестве параметров, а именноkillerRobot и gentleGiant):
killerRobot = robot ("killer",25,200)
gentleGiant = robot ("Mr.Friendly", 10, 300)
Также, как вы можете видеть, я пытаюсь сделать этот бой threeRound с помощью перезаписи роботов с помощью вложенных лямбд.Но я не могу понять, как продолжить игру после первого боя, если у меня все получится.