我正在尝试创建自己的数据类型" Cipher"在哈斯克尔。我意识到有26个!类型可以采用的值(字母表中使用一次且仅一次使用的字符的任意组合)。
我已经这样开始了:
数据密码= [' a' ..' z'] |
我知道Haskell可以"猜测"组合,但我怎么能告诉它我希望类型能够采用上述任何值?
答案 0 :(得分:1)
一个简单的答案可能是
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