Здравствуйте. Я хочу сделать изменение цвета при работе с консолью без curses, с помощью ESC-последовательностей. просто putStr «\033[031m» не меняет цвет, а как работать с CString я не вкурил, решил сделать FFI вызов. Есть вот такой модуль на С:
#include <stdio.h>
void setClr(int n){
switch(n){
case 1: printf("\033[031m"); break;
case 2: printf("\033[032m"); break;
case 3: printf("\033[033m"); break;
case 4: printf("\033[034m"); break;
case 5: printf("\033[035m"); break;
case 6: printf("\033[036m"); break;
case 7: printf("\033[037m"); break;
case 0: printf("\033[030m"); break;
default: printf("\033[0m"); break; // reset
}
}
и вот такой на Хаскеле:
{-# LANGUAGE ForeignFunctionInterface #-}
module Console(setColor,Color(..))where
data Color = Black | Red | Green | Yellow | Blue | Magenta | Cyan | White
deriving(Enum)
foreign import ccall unsafe "setClr" c_setColor :: Int -> IO()
setColor :: Color -> IO()
setColor c = c_setColor (fromEnum c)
теперь когда я в Main вызываю так:
main = do
setColor Red
putStrLn "Hello, World"