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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta