RosettaCodeData/Task/Longest-common-substring/Haskell/longest-common-substring-2.hs

19 lines
528 B
Haskell

import Control.Monad ((<=<))
import Data.List (inits, intersect, maximumBy, tails)
import Data.Ord (comparing)
----------------- LONGEST COMMON SUBSTRING ---------------
longestCommon :: Eq a => [a] -> [a] -> [a]
longestCommon a b =
let pair [x, y] = (x, y)
in maximumBy (comparing length) $
(uncurry intersect . pair) $
[tail . inits <=< tails] <*> [a, b]
--------------------------- TEST -------------------------
main :: IO ()
main =
putStrLn $
longestCommon "testing123testing" "thisisatest"