RosettaCodeData/Task/Draw-a-clock/Haskell/draw-a-clock.hs

115 lines
2.1 KiB
Haskell

import Control.Concurrent
import Data.List
import System.Time
-- Library: ansi-terminal
import System.Console.ANSI
number :: (Integral a) => a -> [String]
number 0 =
["██████"
,"██ ██"
,"██ ██"
,"██ ██"
,"██████"]
number 1 =
[" ██"
," ██"
," ██"
," ██"
," ██"]
number 2 =
["██████"
," ██"
,"██████"
,"██ "
,"██████"]
number 3 =
["██████"
," ██"
,"██████"
," ██"
,"██████"]
number 4 =
["██ ██"
,"██ ██"
,"██████"
," ██"
," ██"]
number 5 =
["██████"
,"██ "
,"██████"
," ██"
,"██████"]
number 6 =
["██████"
,"██ "
,"██████"
,"██ ██"
,"██████"]
number 7 =
["██████"
," ██"
," ██"
," ██"
," ██"]
number 8 =
["██████"
,"██ ██"
,"██████"
,"██ ██"
,"██████"]
number 9 =
["██████"
,"██ ██"
,"██████"
," ██"
,"██████"]
colon :: [String]
colon =
[" "
," ██ "
," "
," ██ "
," "]
newline :: [String]
newline =
["\n"
,"\n"
,"\n"
,"\n"
,"\n"]
space :: [String]
space =
[" "
," "
," "
," "
," "]
leadingZero :: (Integral a) => a -> [[String]]
leadingZero num =
let (tens, ones) = divMod num 10
in [number tens, space, number ones]
fancyTime :: CalendarTime -> String
fancyTime time =
let hour = leadingZero $ ctHour time
minute = leadingZero $ ctMin time
second = leadingZero $ ctSec time
nums = hour ++ [colon] ++ minute ++ [colon] ++ second ++ [newline]
in concat $ concat $ transpose nums
main :: IO ()
main = do
time <- getClockTime >>= toCalendarTime
putStr $ fancyTime time
threadDelay 1000000
setCursorColumn 0
cursorUp 5
main