f34 :: [[Morph]] -> [ByteString]
f34 = join . map aofb where
    aofb :: [Morph] -> [ByteString]
    aofb (a:o:b:ms)
        | isNoun a && (surface o == u"の") && isNoun b
            = (:) (BS.concat $ map surface [a, o, b]) (aofb $ b:ms)
        | otherwise = aofb $ o:b:ms
    aofb _ = []


f34 :: [[Morph]] -> [ByteString]
f34 = join . map aofb where
    aofb :: [Morph] -> [ByteString]
    aofb (a:o:b:ms)
        | isNoun a && (surface o == u"の") && isNoun b
            = (:) (BS.concat $ map surface [a, o, b]) (aofb $ b:ms)
        | otherwise = aofb $ o:b:ms
    aofb _ = []
f34 = join . map aofb where
    aofb :: [Morph] -> [ByteString]
    aofb (a:o:b:ms)
        | isNoun a && (surface o == u"の") && isNoun b
            = (:) (BS.concat $ map surface [a, o, b]) (aofb $ b:ms)
        | otherwise = aofb $ o:b:ms
    aofb _ = []