制作我自己的数据类型" Cipher"在哈斯克尔

时间:2013-10-06 11:54:37

标签: haskell encryption

我正在尝试创建自己的数据类型" Cipher"在哈斯克尔。我意识到有26个!类型可以采用的值(字母表中使用一次且仅一次使用的字符的任意组合)。

我已经这样开始了:

数据密码= [' a' ..' z'] |

我知道Haskell可以"猜测"组合,但我怎么能告诉它我希望类型能够采用上述任何值?

1 个答案:

答案 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