--- /dev/null
+module System.Posix.Uname
+ ( Uname(..)
+ , uname
+ )
+ where
+
+import qualified Bindings.Uname as U
+import Foreign.C
+import Foreign.Marshal
+
+data Uname
+ = Uname {
+ uSysName :: String
+ , uNodeName :: String
+ , uRelease :: String
+ , uVersion :: String
+ , uMachine :: String
+ }
+ deriving (Show, Eq, Ord)
+
+uname :: IO Uname
+uname = alloca $ \ ptr ->
+ do throwErrnoIfMinus1_ "uname" (U.uname ptr)
+ sys <- peekCString $ U.sysname ptr
+ nod <- peekCString $ U.nodename ptr
+ rel <- peekCString $ U.release ptr
+ ver <- peekCString $ U.version ptr
+ mac <- peekCString $ U.machine ptr
+ return $ Uname sys nod rel ver mac