Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
GHC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Gesh
GHC
Commits
e982571c
Commit
e982571c
authored
25 years ago
by
sof
Browse files
Options
Downloads
Patches
Plain Diff
[project @ 1999-09-11 16:50:38 by sof]
Documented Select interface ; removed old Pretty doc
parent
064567b9
Loading
Loading
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
ghc/docs/users_guide/libmisc.vsgml
+79
-63
79 additions, 63 deletions
ghc/docs/users_guide/libmisc.vsgml
with
79 additions
and
63 deletions
ghc/docs/users_guide/libmisc.vsgml
+
79
−
63
View file @
e982571c
...
...
@@ -17,7 +17,7 @@ by giving the @-syslib misc@<nidx>-syslib misc option</nidx>.
<sect2>The @Bag@ type
<label id="Bag">
<p>
<nidx>Bag module (
GHC
syslib)</nidx>
<nidx>Bag module (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -56,7 +56,7 @@ bagToList :: Bag elt -> [elt]
<sect2>The @FiniteMap@ type
<label id="FiniteMap">
<p>
<nidx>FiniteMap module (
GHC
syslib)</nidx>
<nidx>FiniteMap module (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -146,7 +146,7 @@ eltsFM :: FiniteMap key elt -> [elt]
<sect2>The @ListSetOps@ type
<label id="ListSetOps">
<p>
<nidx>ListSetOps module (
GHC
syslib)</nidx>
<nidx>ListSetOps module (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -166,7 +166,7 @@ intersectingLists :: Eq a => [a] -> [a] -> Bool
<sect2>The @Maybes@ type
<label id="Maybes">
<p>
<nidx>Maybes module (
GHC
syslib)</nidx>
<nidx>Maybes module (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -242,7 +242,7 @@ accumulating any errors that occur.
<sect2>The @Memo@ library
<label id="memo-library">
<p>
<nidx>Memo (
GHC
syslib)</nidx>
<nidx>Memo (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -286,7 +286,7 @@ memo_sized :: Int -> (a -> b) -> a -> b
<sect2>The @PackedString@ type
<label id="PackedString">
<p>
<nidx>PackedString module (
GHC
syslib)</nidx>
<nidx>PackedString module (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -347,59 +347,12 @@ substrPS :: PackedString -> Int -> Int -> PackedString
-- start and end chars you want; both 0-origin-specified
</verb></tscreen>
%************************************************************************
%* *
<sect2>The @Pretty@ type
<label id="Pretty">
<p>
<nidx>Pretty module (GHC syslib)</nidx>
%* *
%************************************************************************
This is the pretty-printer that is currently used in GHC:
<tscreen><verb>
type Pretty
ppShow :: Int{-width-} -> Pretty -> [Char]
pp'SP :: Pretty -- "comma space"
ppComma :: Pretty -- ,
ppEquals :: Pretty -- =
ppLbrack :: Pretty -- [
ppLparen :: Pretty -- (
ppNil :: Pretty -- nothing
ppRparen :: Pretty -- )
ppRbrack :: Pretty -- ]
ppSP :: Pretty -- space
ppSemi :: Pretty -- ;
ppChar :: Char -> Pretty
ppDouble :: Double -> Pretty
ppFloat :: Float -> Pretty
ppInt :: Int -> Pretty
ppInteger :: Integer -> Pretty
ppRational :: Rational -> Pretty
ppStr :: [Char] -> Pretty
ppAbove :: Pretty -> Pretty -> Pretty
ppAboves :: [Pretty] -> Pretty
ppBeside :: Pretty -> Pretty -> Pretty
ppBesides :: [Pretty] -> Pretty
ppCat :: [Pretty] -> Pretty
ppHang :: Pretty -> Int -> Pretty -> Pretty
ppInterleave :: Pretty -> [Pretty] -> Pretty -- spacing between
ppIntersperse :: Pretty -> [Pretty] -> Pretty -- no spacing between
ppNest :: Int -> Pretty -> Pretty
ppSep :: [Pretty] -> Pretty
</verb></tscreen>
%************************************************************************
%* *
<sect2>The @Set@ type
<label id="Set">
<p>
<nidx>Set module (
GHC
syslib)</nidx>
<nidx>Set module (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -434,7 +387,7 @@ cardinality :: Set a -> Int
<sect2>The @BitSet@ interface
<label id="BitSet">
<p>
<nidx>Bitset interface (
GHC
syslib)</nidx>
<nidx>Bitset interface (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -464,7 +417,7 @@ listBS :: BitSet -> [Int]
<sect2>The @Util@ type
<label id="Util">
<p>
<nidx>Util module (
GHC
syslib)</nidx>
<nidx>Util module (
misc
syslib)</nidx>
%* *
%************************************************************************
...
...
@@ -564,7 +517,7 @@ several useful C libraries, mostly from the GNU project.
<sect2>The @Readline@ interface
<label id="Readline">
<p>
<nidx>Readline library (
GHC
syslib)</nidx>
<nidx>Readline library (
misc
syslib)</nidx>
<nidx>command-line editing library</nidx>
%* *
%************************************************************************
...
...
@@ -603,8 +556,8 @@ will see in the GNU readline documentation.)
<sect2>The @Regex@ and @MatchPS@ interfaces
<label id="Regex">
<p>
<nidx>Regex library (
GHC
syslib)</nidx>
<nidx>MatchPS library (
GHC
syslib)</nidx>
<nidx>Regex library (
misc
syslib)</nidx>
<nidx>MatchPS library (
misc
syslib)</nidx>
<nidx>regular-expressions library</nidx>
%* *
%************************************************************************
...
...
@@ -748,7 +701,7 @@ matchPrefixPS :: PackedString -> PackedString -> Int
<sect2>The @RegexString@ interface
<label id="RegexString">
<p>
<nidx>RegexString library (
GHC
syslib)</nidx>
<nidx>RegexString library (
misc
syslib)</nidx>
<nidx>regular-expressions library</nidx>
%* *
%************************************************************************
...
...
@@ -778,15 +731,15 @@ matchRegex
<sect2>Network-interface toolkit---@Socket@ and @SocketPrim@
<label id="Socket">
<p>
<nidx>SocketPrim interface (
GHC
syslib)</nidx>
<nidx>Socket interface (
GHC
syslib)</nidx>
<nidx>SocketPrim interface (
misc
syslib)</nidx>
<nidx>Socket interface (
misc
syslib)</nidx>
<nidx>network-interface library</nidx>
<nidx>sockets library</nidx>
<nidx>BSD sockets library</nidx>
%* *
%************************************************************************
(Darren Moffat supplied the
network-interface toolkit
.)
(Darren Moffat supplied the
initial version of this library
.)
Your best bet for documentation is to look at the code---really!---
normally in @fptools/ghc/lib/misc/{BSD,Socket,SocketPrim@.lhs}.
...
...
@@ -852,3 +805,66 @@ mkPortNumber :: Int -> PortNumber
Various examples of networking Haskell code are provided in
%@ghc/misc/examples/@, notably the @net???/Main.hs@ programs.
%************************************************************************
%* *
<sect2>The @Select@ interface
<label id="Select">
<p>
<nidx>Select interface (misc syslib)</nidx>
%* *
%************************************************************************
The <tt/Select/ interface provides a Haskell wrapper for the <tt/select()/
OS call supplied by many modern UNIX variants. <tt/Select/ exports the
following:
<tscreen><verb>
type TimeOut = Maybe Int
-- Nothing => wait indefinitely.
-- Just x | x >= 0 => block waiting for 'x' micro seconds.
-- | otherwise => block waiting for '-x' micro seconds.
hSelect :: [Handle]
-> [Handle]
-> [Handle]
-> TimeOut
-> IO SelectResult
type SelectResult
= ( [Handle] -- input handles ready
, [Handle] -- output handles ready
, [Handle] -- exc. handles ready
)
</verb></tscreen>
Here's an example of how it could be used:
<tscreen><verb>
module Main(main) where
import Select
import IO
main :: IO ()
main = do
hSetBuffering stdin NoBuffering
putStrLn "waiting for input to appear"
hSelect [stdin] [] [] Nothing
putStrLn "input ready, let's try reading"
x <- getChar
print x
</verb></tscreen>
where the call to <tt/hSelect/ makes the process go to sleep
until there's input available on <tt/stdin/.
Notice that this particular use of <tt/hSelect/ is now really a no-op
with GHC compiled code, as its implementation of IO will take care to
avoid blocking the process (i.e., all running Haskell threads), and
call <tt/select()/ for you, if needs be. However, <tt/hSelect/ exposes
functionality that is useful in other contexts (e.g., you want to
wait for input on two <tt/Handles/ for 3 seconds, but no longer.)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment