tengo una nueva idea de usar Xmonad's XMonad.Prompt.Input. Pensé que sería genial si se pudiera hacer una calculadora simple que calcule lo que el usuario ingresa y devuelva el resultado en el texto del siguiente aviso, terminando cuando el usuario presione escape ... El problema es que no lo hago se sabe muy bien cómo hacer frente a los tipos ...Calculadora simple en el prompt xmonad
hasta ahora tengo esto:
que no funciona. Me sale:
Couldn't match expected type `[Char]' with actual type `IO String'
Expected type: String
Actual type: IO String
In the return type of a call of `runAndGetOutput'
In the second argument of `calcPrompt', namely
`(runAndGetOutput ("calc" ++ next))'
entiendo que tiene algo que ver con el hecho de que runAndGetOutput vuelve IO cadena y necesito una cadena normal para inputPrompt incluido desde XMonad.Prompt.Input importación. Pero no tengo ni idea de cómo lidiar con eso ...
¡Muchas gracias por su ayuda!
EDIT: Ahora tengo unas pocas cosas:
runAndGetOutput :: String -> IO String
runAndGetOutput cmd = do
(_, pout, _, phandle) <- runInteractiveCommand cmd
a <- hGetContents pout
waitForProcess phandle
return a
calcPrompt :: XPConfig -> String -> X()
calcPrompt c ans =
inputPrompt c ans ?+ \next ->
liftIO (runAndGetOutput ("echo -n " ++ next)) >>= calcPrompt c
que compila, pero no funciona como se esperaba. Puedo abrir el mensaje, ingresar un texto, luego se lanza el comando de shell, pero luego simplemente descarta el valor de stdo en lugar de usarlo como un nuevo texto de solicitud.
Esperaría que la versión con echo do siguiente: Cuando abro el prompt, se muestra una cadena predeterminada. Cuando ingreso un valor y presiono regresar, se abre otro mensaje con el valor ingresado previamente (gracias al eco que simplemente devuelve lo que tiene). Si funcionó con echo, reemplazaría echo con algún script bash para realizar los cálculos y devolver el resultado en lugar de echo.
EDIT reciente: Resuelto finalmente. El código final de mi pequeño fragmento de cal está en mi respuesta automática :) Gracias a todos.
Eso funcionó. ¡Muchas gracias! –