24 lines
		
	
	
	
		
			968 B
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
	
		
			968 B
		
	
	
	
		
			Haskell
		
	
	
	
	
	
| --------------------------------------------------------------------------------
 | |
| module App where
 | |
| --------------------------------------------------------------------------------
 | |
| import Keyboard (Keyboard(..))
 | |
| import Transforms (Transform(..))
 | |
| import Utils ((|>))
 | |
| 
 | |
| import qualified Data.Char as Char
 | |
| import qualified Utils
 | |
| import qualified Keyboard
 | |
| import qualified Data.HashMap.Strict as HM
 | |
| --------------------------------------------------------------------------------
 | |
| 
 | |
| transform :: Keyboard -> Transform -> Keyboard
 | |
| transform (Keyboard xs) HorizontalFlip = xs |> fmap reverse |> Keyboard
 | |
| transform (Keyboard xs) VerticalFlip   = xs |> reverse |> Keyboard
 | |
| transform (Keyboard xs) (Shift n)      = xs |> fmap (Utils.rotate n) |> Keyboard
 | |
| 
 | |
| retypePassage :: String -> Keyboard -> Maybe String
 | |
| retypePassage passage newKeyboard =
 | |
|   passage
 | |
|   |> fmap Char.toUpper
 | |
|   |> traverse (\c -> HM.lookup c Keyboard.charToCoord)
 | |
|   >>= traverse (Keyboard.coordToChar newKeyboard)
 |