Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell中从字符到字符串的映射_Haskell_Transliteration - Fatal编程技术网

Haskell中从字符到字符串的映射

Haskell中从字符到字符串的映射,haskell,transliteration,Haskell,Transliteration,我正试图弄清楚如何在Pandoc中将id标识符从德语umlauts转换为ASCII。目前只有一个映射Char->Maybe Char,它将ä转换为a并将ß转换为无等,但最常见的约定是将ä映射为ae和ß转换为ss等等。以下是我到目前为止的情况: import Data.Char (isAscii) import qualified Data.Map as M asciiMap' :: M.Map Char String asciiMap' = M.fromList [('\196',"Ae"

我正试图弄清楚如何在Pandoc中将
id
标识符从德语umlauts转换为ASCII。目前只有一个映射
Char->Maybe Char
,它将
ä
转换为
a
并将
ß
转换为
等,但最常见的约定是将
ä
映射为
ae
ß
转换为
ss
等等。以下是我到目前为止的情况:

import Data.Char (isAscii)
import qualified Data.Map as M

asciiMap' :: M.Map Char String
asciiMap' = M.fromList
  [('\196',"Ae")
  ,('\214',"Oe")
  ,('\220',"Ue")
  ,('\223',"ss")
  ,('\228',"ae")
  ,('\246',"oe")
  ,('\252',"ue")
  ]

toAsciiStr :: Char -> String
toAsciiStr c | isAscii c = [c]
             | otherwise = M.findWithDefault "" c asciiMap'

myTranslit :: String -> String
myTranslit [] = []
myTranslit (x:xs) = toAsciiStr x ++ myTranslit xs
我的问题是关于我的翻译


是否已经有一个内置的类似映射的函数
someMap::(a->[a])->[a]->[a]

是的,您正在寻找的是在映射后连接输出的函数。由于
[]
是一种
可折叠的
,因此它可以专门用于
concatMap::(a->[b])->[a]->[b]
,并进一步(使用
a~Char
b~Char
)到
concatMap::(Char->[Char])->[Char]->[Char
。请注意,
String
type String=[Char]
的别名,因此,
String
只不过是
Char
角色的列表

因此,您可以使用:

myTranslit :: String -> String
myTranslit = concatMap toAsciiStr
mytranslat::String->String

myTranslit=concatMap to Scienistr
您可以使整个内容尽可能简洁

myTranslit :: String -> String
myTranslit = concatMap $ \c -> case c of
  'Ä' -> "Ae"
  'Ö' -> "Oe"
  'Ü' -> "Ue"
  'ä' -> "ae"
  'ö' -> "oe"
  'ü' -> "ue"
  'ß' -> "ss"
  _ | isAscii c  = [c]
    | otherwise  = ""

伟大的我尝试了你的编辑,现在它工作了:)我意识到
String
[Char]
,并且实际上期望一个类型为
::(a->[a])->[a]->[a]
的函数,也许我应该编辑这个问题……有趣的选项,特别是在我的情况下,与Pandoc的集成无论如何都必须改变。