我正在尝试在 Haskell 中创建自己的名为“Cipher”的数据类型。我意识到有26个!类型可以采用的值(字母表中的任何字符组合使用一次且仅一次)。
我是这样开始的:
数据密码 = ['a'..'z'] |
我知道 Haskell 可以“猜测”组合,但我如何告诉它我希望该类型能够采用上述任何值?
我正在尝试在 Haskell 中创建自己的名为“Cipher”的数据类型。我意识到有26个!类型可以采用的值(字母表中的任何字符组合使用一次且仅一次)。
我是这样开始的:
数据密码 = ['a'..'z'] |
我知道 Haskell 可以“猜测”组合,但我如何告诉它我希望该类型能够采用上述任何值?
一个简单的答案可能是
import Data.Char (ord)
import Data.List (permutations)
newtype Cipher = Cipher String
ciphers = map Cipher . permutations $ ['a' .. 'z']
-- Lookup a characters value in the cipher
mapChar :: Cipher -> Char -> Char
mapChar ciph c = ciph !! ord c - ord 'a'
encode :: Cipher -> String -> String
encode ciph = map (mapChar ciph)
decode :: Cipher -> String -> String
decode -- Ill let you figure this out