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 7919021
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 3, 20262026-06-03T15:42:50+00:00 2026-06-03T15:42:50+00:00

I would like to define a generic function that gets the next value in

  • 0

I would like to define a generic function that gets the next value in a range. I have the following function definition:

nextValInRange :: (Enum a) => a -> a
nextValInRange = succ

The problem with the above definition is that for Fractional values, I would like to change the value succ function increments with. Instead of incrementing by 1.0, I would like succ to increment by 0.2. For example:

(succ 10.0) = 10.2, not 11.0

The problem is I still want the nextValInRange function to be for any value that is in Enum type class.

I could write:

nextValInRange :: (Enum a, Num a) => a -> a -> a
nextValInRange stepVal rangeVal = rangeVal + stepVal

but I do not want to add a Num type class restriction.

Is there some haskell voodoo that I can use to achieve this?

The other solution I can think of is to have 2 separate nextValInRange functions, 1 for Nums and another for normal Enums.

TIA

  • 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-06-03T15:42:52+00:00Added an answer on June 3, 2026 at 3:42 pm

    Is there some haskell voodoo that I can use to achieve this?

    Essentially, no. You could get it to work with an additional typeclass and some scary LANGUAGE pragmas, but that would probably be more work than just defining instances for your own typeclass in the first place.

    I would recommend using enumFromTo as Chris suggests, since that is solving basically the same problem that you are solving.

    However, you could just turn nextValInRange to a function provided by the caller. Suppose it is used in some code like this:

    makeRange :: Enum a => a -> a -> [a]
    makeRange lo hi
      | lo < hi = lo : makeRange (nextValInRange lo) hi
      | otherwise = []
    

    Simply change the implicit Enum dictionary passing into an explicit function pass

    makeRange :: (a -> a) -> a -> a -> [a]
    makeRange mySucc lo hi
      | lo < hi = lo : makeRange (mySucc lo) hi
      | otherwise = []
    

    Then you can pass in the (+ 0.1) function for floats, and succ for whatever type you feel that is appropriate.

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

Sidebar

Related Questions

I would like to define a function that will be invoked from entry_32.S. It
I would like to define some kind of safe division (and modulo) function, one
In my Play! 2.0 application I would like to define the following languages: #
I have a WPF application with several windows. I would like to define GLOBAL
I would like to define a template function but disallow instantiation with a particular
I would like to define several versions of a thing but with different types
I would like to define a constant (like the admin-email-adress) depending on the environment.
I would like to define and initialize some variables in web.xml and the access
I would like to define the z order of the views of a RelativeLayout
I would like to define access right to Collabnet Subversion Directory with LDAP domain

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.