Haskell: Was meint der Compiler damit?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

x1 und x2 sollen hier vermutlich Gleitkommazahlen aufnehmen, die dann im weiteren Verlauf der Programmausführung addiert werden.

Das Problem ist, dass Haskell den Datentyp von X1, x1 nicht ermitteln und deshalb auch nicht entscheiden kann, welche Definition von readLn zu verwenden ist.

An einem sehr verkürzten Beispiel zeige ich zwei mögliche Auswege:

erster Ausweg: Hilfsfunktion zum Lesen eines Float-Werts:

import System.IO

readFloat :: IO Float
readFloat = readLn

main :: IO ()
main = do
  x <- readFloat
  y <- readFloat
  let sum = x + y
  print(sum)

zweiter Ausweg: Verwendung eines Cast:

import System.IO

main :: IO ()
main = do
  x <- readLn :: IO Float
  y <- readLn :: IO Float
  let sum = x + y
  print(sum)

Etwas in der Art könnte in deinem Programm weiterhelfen.

Woher ich das weiß:Berufserfahrung – Berufstätigkeit als Software-Entwickler