I have this piece of code: stopDaytimeServer dts = case dts of DaytimeServer {streamPort = Just _, dgramPort = Just _} -> do killServer (ss dts) killServer (ds dts) DaytimeServer {streamPort = Just _, dgramPort = Nothing} -> do killServer (ss dts) DaytimeServer {streamPort = Nothing, dgramPort = Just _} -> do killServer (ds dts) and I don't like it. I don't like the code repeting. It'd look good with Lips' "when": (define stop-daytime-serve dts (when (stream dts) (kill-server (ss dts))) (when (dgram dts) (kill-server (ds dts)))) Is there a better way to write that on Haskell ? Thanks. -- Pupeno <pupeno@pupeno.com> (http://pupeno.com) PS: I have a worse case: -- | Having a 'DaytimeServer', run it according to its specifications. runDaytimeServer :: DaytimeServer -> IO DaytimeServer runDaytimeServer dts = case dts of DaytimeServer {streamPort = Just _, dgramPort = Just _} -> do ss <- runDgramDaytimeServer dts ds <- runStreamDaytimeServer dts return dts{ss = ss, ds = ds} DaytimeServer {streamPort = Just _, dgramPort = Nothing} -> do ss <- runStreamDaytimeServer dts return dts{ss = ss} DaytimeServer {streamPort = Nothing, dgramPort = Just _} -> do ds <- runDgramDaytimeServer dts return dts{ds = ds}
On 12/26/05, Pupeno <pupeno@pupeno.com> wrote:
I have this piece of code:
stopDaytimeServer dts = case dts of DaytimeServer {streamPort = Just _, dgramPort = Just _} -> do killServer (ss dts) killServer (ds dts) DaytimeServer {streamPort = Just _, dgramPort = Nothing} -> do killServer (ss dts) DaytimeServer {streamPort = Nothing, dgramPort = Just _} -> do killServer (ds dts)
and I don't like it. I don't like the code repeting. It'd look good with Lips' "when": (define stop-daytime-serve dts (when (stream dts) (kill-server (ss dts))) (when (dgram dts) (kill-server (ds dts))))
Is there a better way to write that on Haskell ?
Yes, there is: stopDaytimeServer dts = do when (isJust (streamPort dts)) $ killServer (ss dts) when (isJust (dgramPort dts)) $ killServer (ds dts) You can do the same thing with 'runDaytimeServer'. -- Friendly, Lemmih
participants (2)
-
Lemmih -
Pupeno