{-# OPTIONS_GHC -fno-cse #-}
module System.Info.MAC
( mac
, macs
, nic
, nics
, refresh
) where
import Data.MAC
import System.Info.MAC.Fetch
import Data.IORef
import System.IO
import System.IO.Unsafe
import Data.Maybe
import Control.Applicative
mac :: IO (Maybe MAC)
mac :: IO (Maybe MAC)
mac = forall a. [a] -> Maybe a
listToMaybe forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO [MAC]
macs
macs :: IO [MAC]
macs :: IO [MAC]
macs = forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> b
snd forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO [(String, MAC)]
nics
nic :: IO (Maybe (String, MAC))
nic :: IO (Maybe (String, MAC))
nic = forall a. [a] -> Maybe a
listToMaybe forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO [(String, MAC)]
nics
nics :: IO [(String, MAC)]
nics :: IO [(String, MAC)]
nics = do
[(String, MAC)]
val <- forall a. IORef a -> IO a
readIORef forall {a}. IORef [a]
fetched
case [(String, MAC)]
val of [ ] -> IO [(String, MAC)]
refresh
(String, MAC)
_:[(String, MAC)]
_ -> forall (m :: * -> *) a. Monad m => a -> m a
return [(String, MAC)]
val
refresh :: IO [(String, MAC)]
refresh :: IO [(String, MAC)]
refresh = do
[(String, MAC)]
res <- IO [(String, MAC)]
fetchNICs
forall a. IORef a -> a -> IO ()
writeIORef forall {a}. IORef [a]
fetched [(String, MAC)]
res
forall (m :: * -> *) a. Monad m => a -> m a
return [(String, MAC)]
res
{-# NOINLINE fetched #-}
fetched :: IORef [a]
fetched = forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ forall a. a -> IO (IORef a)
newIORef []