我想转换这个元组列表:
[(1,'a'),(2,'b') ... ]
变成一个可以写成这样的函数:
g :: Int -> Char
g 1 = 'a'
g 2 = 'b'
.
.
.
用例:
g 1 -- | 'a'
我想转换这个元组列表:
[(1,'a'),(2,'b') ... ]
变成一个可以写成这样的函数:
g :: Int -> Char
g 1 = 'a'
g 2 = 'b'
.
.
.
用例:
g 1 -- | 'a'
这种函数的签名是[(a, b)] -> a -> b
. 听上去是很常见的操作,所以让我们在 Hoogle 上搜索一下,看看它是否已经存在。哦,它几乎做到了,它被称为lookup
:
lookup :: Eq a => a -> [(a, b)] -> Maybe b
lookup key assocs
在关联列表中查找键。
我们需要做的是翻转前两个参数(使用flip
)并剥离Maybe
结果(组合使用fromJust
)。结果:
g :: Int -> Char
g = fromJust . flip lookup [(1,'a'),(2,'b'),(3,'c')]