{-# LANGUAGE DeriveDataTypeable #-} -- | A module for dealing with shebangs. module Ormolu.Parser.Shebang ( Shebang (..), extractShebangs, isShebang, ) where import Data.Data (Data) import qualified Data.List as L import SrcLoc -- | A wrapper for a shebang. newtype Shebang = Shebang (Located String) deriving (Eq, Data) -- | Extract shebangs from the beginning of a comment stream. extractShebangs :: [Located String] -> ([Shebang], [Located String]) extractShebangs comments = (Shebang <$> shebangs, rest) where (shebangs, rest) = span (isShebang . unLoc) comments -- | Return 'True' if given 'String' is a shebang. isShebang :: String -> Bool isShebang str = "#!" `L.isPrefixOf` str