module Braille where
import Data.Char
import Data.Bits
dotsToBrailleBar :: [Int] -> String
dotsToBrailleBar [] = ""
dotsToBrailleBar [x] = [dotsToBrailleChar x 0]
dotsToBrailleBar (x:y:xs) = dotsToBrailleChar x y : dotsToBrailleBar xs
dotsToBrailleChar :: Int -> Int -> Char
dotsToBrailleChar n m =
chr $ 0x2800 + sum
[ bit 0 * fromEnum (testBit n 3)
, bit 1 * fromEnum (testBit n 2)
, bit 2 * fromEnum (testBit n 1)
, bit 3 * fromEnum (testBit m 3)
, bit 4 * fromEnum (testBit m 2)
, bit 5 * fromEnum (testBit m 1)
, bit 6 * fromEnum (testBit n 0)
, bit 7 * fromEnum (testBit m 0)
]