Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7053275
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 28, 20262026-05-28T03:29:06+00:00 2026-05-28T03:29:06+00:00

I would like to implement the following scenario in Haskell. I have an enumerable

  • 0

I would like to implement the following scenario in Haskell. I have an
enumerable set of ‘events’ defined like this:

data MyEvent = Event1
             | Event2
             | Event3

I want to define handlers for these events to be used in the following way:

eventLoop :: Handler h => h -> IO ()
eventLoop currentHandler = do
    event <- getNextEvent
    nextHandler <- currentHandler event
    eventLoop nextHandler

Basically I want handlers to be able to return themselves or another handler to
handle future events. It’s the type of handlers I’m not sure about.

My first idea was to define handlers as simple functions, but their type would
get infinitely long:

myHandler :: Event -> IO (Event -> IO (Event -> ... ))

I suspect this can be solved with a type class, where each handler would need
to implement a function to handle events (which in turn returns another type of
the same class), but the recursive definition would still apply. Can someone
more well versed in the type system point me in the right direction? I also
welcome any different takes on this.

Thanks!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-28T03:29:07+00:00Added an answer on May 28, 2026 at 3:29 am

    Well, “infinite” types usually amount to unrolled recursive types. So one thing you could do is make the recursion explicit using a newtype:

    newtype Handler = Handler { runHandler :: Event -> IO Handler }
    

    This is also probably the simplest solution, because it avoids the need to juggle type classes and different instances in order to get different behaviors–each handler can pick what it returns, since they have a uniform interface.

    Note that, in many cases, defining a type class to solve this kind of problem is completely superfluous. If you’re dealing with a polymorphic type Handler h => h, all you can do with that type is use the type class’s functions on it. If the functions defined on that type class are simple, you can save yourself a lot of hassle by conceptually “pre-applying” them.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I would like to implement the following behaviour: I have a special media player,
I would like to implement the following simple pattern in an android app: Activity
I would like to implement a post build event that performs the following actions
I would like to implement a data access object pattern in C++, but preferably
I would like to implement a command line interface for a Java application. This
I would like to implement a producer/consumer scenario that obeys interfaces that are roughly:
How could I best implement the following scenario? I have a Next Period... button
This seems like a reasonable (and maybe simple?) scenario, but how would you do
I have a following fairly simple scenario: Some data needs to be written into
I would like to implement something similar to a c# delegate method in PHP.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.