packages feed

danecheck-1.0.0.0: Dane/Scanner/State.hs

module Dane.Scanner.State
    ( Scanner
    , ScannerSt(..)
    , evalScanner
    , scannerFail
    ) where

import qualified Control.Monad.Trans.State.Strict as ST
import           Net.DNSBase.Resolver (Resolver)

import Dane.Scanner.Opts

data ScannerSt = ScannerSt
    { scannerOpts     :: !Opts
    , scannerResolver :: !Resolver
    , scannerOK       :: !Bool
    }

type Scanner = ST.StateT ScannerSt IO

evalScanner :: Scanner a -> ScannerSt -> IO a
evalScanner = ST.evalStateT

scannerFail :: a -> Scanner a
scannerFail x = do
    ST.modify $ \s -> s { scannerOK = False }
    return x