[...] 想要在遗留代码库中找到变量 foo 在 if 条件中使用的所有位置。
————为什么 Haskell 值得学习
我的代码是
import Language.C
import Data.Generics
import Control.Monad
import Text.Read
parseAndFindFoos :: FilePath -> IO (Either ParseError [Position])
parseAndFindFoos path = liftM (fmap findFooLocations) (parseCFilePre path)
findFooLocations input = fmap posOf (listify isIfOfInterest input)
isIfOfInterest (CIf cond _ _ _) = not (null (listify isFooIdent cond))
isFooIdent (Ident name) = (name == "foo")
如何为(Typeable Lexeme)添加实例声明?