Haskell usa múltiples funciones dentro de otra función
Estoy creando un programa para calcular la solución a una ecuación cúbica en Haskell. Soy nuevo en los lenguajes funcionales y tengo algunas dificultades. Aquí está mi código:
cubicQ :: Float -> Float -> Float -> Float
cubicQ a b c = ((3 * a * c) - (b**2)) / (9 * (a**2)) --calculates Q
cubicR :: Float -> Float -> Float -> Float -> Float
cubicR a b c d = ((9 * a * b * c) - (27 * a**2 * d) - (2 * b**3)) / (54
* a**3)--calculates R
cubicS :: Float -> Float -> Float
cubicS r q = (r + (sqrt(q**3 + r**2))) ** (1/3)--calculates S
cubicT :: Float -> Float -> Float
cubicT q r = (r - (sqrt(q**3 + r**2))) ** (1/3)--calculates T
check :: Float -> Float -> Float
check q r = ((q**3)+(r**2)) --checks for real numbers
x1 :: Float -> Float -> Float -> Float -> Float
x1 s t a b = (s + t) - (b / (3 * a)) --calculates x1
cubicRealSolution :: Float -> Float -> Float -> Float -> Float
--defines function which takes input and solves
cubicRealSolution a b c d = if l < 0 then error "NaN" else (sol) --Check
for real numbers
where
q = cubicQ
r = cubicR
s = cubicS
t = cubicT
l = check
sol = x1
Recibo este error al compilar,* Couldn't match expected type Float' with actual type Float -> Float -> Float -> Float -> Float' * Probable cause: sol' is applied to too few arguments
No estoy seguro de a dónde ir desde aquí. Puedo hacer que funcione si elimino todas las funciones y, en cambio, hago que mis variables sean iguales a los cálculos que hacen las funciones, pero es para una tarea escolar y, por lo tanto, tengo que definir estas funciones.