Generate coords function from existing qwerty keyboard
Per my take-home assignment's reviewer's comments, with which for the record I agree, I should generate the character->coordinate table from my existing qwerty keyboard definition. The best part is: by doing this I found a bug: Notice how the original '0' character was mapped to the Coordinate (0,0)... thus every subsequent digit key (i.e. the first row) is off-by-one.
This commit is contained in:
parent
4ff1ea291c
commit
17e1764ef8
1 changed files with 8 additions and 44 deletions
|
@ -5,6 +5,7 @@
|
||||||
module Keyboard where
|
module Keyboard where
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
import Utils
|
import Utils
|
||||||
|
import Data.Coerce
|
||||||
import Data.Hashable (Hashable)
|
import Data.Hashable (Hashable)
|
||||||
import GHC.Generics (Generic)
|
import GHC.Generics (Generic)
|
||||||
|
|
||||||
|
@ -32,50 +33,13 @@ instance Hashable Coord
|
||||||
|
|
||||||
-- | List of characters to their QWERTY coordinatees.
|
-- | List of characters to their QWERTY coordinatees.
|
||||||
coords :: [(Char, Coord)]
|
coords :: [(Char, Coord)]
|
||||||
coords = [ ('0', Coord { row = 0, col = 0 })
|
coords =
|
||||||
, ('1', Coord { row = 0, col = 1 })
|
qwerty
|
||||||
, ('2', Coord { row = 0, col = 2 })
|
|> coerce
|
||||||
, ('3', Coord { row = 0, col = 3 })
|
|> fmap (zip [0..])
|
||||||
, ('4', Coord { row = 0, col = 4 })
|
|> zip [0..]
|
||||||
, ('5', Coord { row = 0, col = 5 })
|
|> fmap (\(row, xs) -> xs |> fmap (\(col, char) -> (char, Coord row col)))
|
||||||
, ('6', Coord { row = 0, col = 6 })
|
|> mconcat
|
||||||
, ('7', Coord { row = 0, col = 7 })
|
|
||||||
, ('8', Coord { row = 0, col = 8 })
|
|
||||||
, ('9', Coord { row = 0, col = 9 })
|
|
||||||
-- second row
|
|
||||||
, ('Q', Coord { row = 1, col = 0 })
|
|
||||||
, ('W', Coord { row = 1, col = 1 })
|
|
||||||
, ('E', Coord { row = 1, col = 2 })
|
|
||||||
, ('R', Coord { row = 1, col = 3 })
|
|
||||||
, ('T', Coord { row = 1, col = 4 })
|
|
||||||
, ('Y', Coord { row = 1, col = 5 })
|
|
||||||
, ('U', Coord { row = 1, col = 6 })
|
|
||||||
, ('I', Coord { row = 1, col = 7 })
|
|
||||||
, ('O', Coord { row = 1, col = 8 })
|
|
||||||
, ('P', Coord { row = 1, col = 9 })
|
|
||||||
-- third row
|
|
||||||
, ('A', Coord { row = 2, col = 0 })
|
|
||||||
, ('S', Coord { row = 2, col = 1 })
|
|
||||||
, ('D', Coord { row = 2, col = 2 })
|
|
||||||
, ('F', Coord { row = 2, col = 3 })
|
|
||||||
, ('G', Coord { row = 2, col = 4 })
|
|
||||||
, ('H', Coord { row = 2, col = 5 })
|
|
||||||
, ('J', Coord { row = 2, col = 6 })
|
|
||||||
, ('K', Coord { row = 2, col = 7 })
|
|
||||||
, ('L', Coord { row = 2, col = 8 })
|
|
||||||
, (';', Coord { row = 2, col = 9 })
|
|
||||||
-- fourth row
|
|
||||||
, ('Z', Coord { row = 3, col = 0 })
|
|
||||||
, ('X', Coord { row = 3, col = 1 })
|
|
||||||
, ('C', Coord { row = 3, col = 2 })
|
|
||||||
, ('V', Coord { row = 3, col = 3 })
|
|
||||||
, ('B', Coord { row = 3, col = 4 })
|
|
||||||
, ('N', Coord { row = 3, col = 5 })
|
|
||||||
, ('M', Coord { row = 3, col = 6 })
|
|
||||||
, (',', Coord { row = 3, col = 7 })
|
|
||||||
, ('.', Coord { row = 3, col = 8 })
|
|
||||||
, ('/', Coord { row = 3, col = 9 })
|
|
||||||
]
|
|
||||||
|
|
||||||
-- | Mapping of characters to their coordinates on a QWERTY keyboard with the
|
-- | Mapping of characters to their coordinates on a QWERTY keyboard with the
|
||||||
-- top-left corner as 0,0.
|
-- top-left corner as 0,0.
|
||||||
|
|
Loading…
Reference in a new issue