第6个Haskell问题是99个Haskell问题中的一个,可以在wiki.haskell.org上找到解决方案。该问题提供了一种单子测试列表(类型为
[a]
)是否为回文的方法:isPalindromeM :: (Eq a) => [a] -> Bool
isPalindromeM = reverse >>= (==)
(这里的reverse :: [c] -> [c]
接受一个列表并以相反的顺序输出一个列表)。
绑定操作意味着这里涉及到一个单子,但是这个单子是什么?
由于isPalindrome涉及到列表,我的第一个猜想是单子与List单子相关,但我不知道如何建立联系。
flip
)。所以我会问作者,为什么不使用isPalindromA = (==) <*> reverse
? - Micha Wiedenmann