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

  • Home
  • SEARCH
  • 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 6009981
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T02:03:00+00:00 2026-05-23T02:03:00+00:00

import Data.List (genericLength) len = genericLength :t genericLength genericLength :: (Num i) => [b]

  • 0
import Data.List (genericLength)

len = genericLength

:t genericLength
genericLength :: (Num i) => [b] -> i
:t len
len :: [b] -> Integer

Why is the type of len different from type of genericLength? The intent here is to use a shorter alias for genericLength.

Aren’t functions first-class in haskell? Shouldn’t giving another name for a function result in an identical function?

  • 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-23T02:03:01+00:00Added an answer on May 23, 2026 at 2:03 am

    What you’re seeing here is because of a requirement that top-level declarations with no arguments be monomorphic. You can find some discussion of the reasons for this on the Haskell wiki, and some information about controlling this behavior in the GHC user’s guide.

    As illustration, note that giving len an argument fixes the problem:

    len x = genericLength x
    
    > :t len
    len :: Num i => [b] -> i
    

    So does giving it a type signature:

    len :: (Num b) => [a] -> b
    len = genericLength
    

    And so does turning off the monomorphism restriction:

    {-# LANGUAGE NoMonomorphismRestriction #-}
    import Data.List (genericLength)
    
    len = genericLength
    
    > :t len
    len :: Num i => [b] -> i
    

    In this specific case, I think you’re also getting a different type (rather than a compiler error) because of defaulting rules that specify that certain type classes should default to specific types (in this case, Num defaults to Integer. If you try doing the same thing with fmap you get this:

    > :r
    [1 of 1] Compiling Main             ( MonoTest.hs, interpreted )
    
    MonoTest.hs:4:5:
        Ambiguous type variable `f0' in the constraint:
          (Functor f0) arising from a use of `fmap'
        Possible cause: the monomorphism restriction applied to the following:
          f :: forall a b. (a -> b) -> f0 a -> f0 b
            (bound at MonoTest.hs:4:1)
        Probable fix: give these definition(s) an explicit type signature
                      or use -XNoMonomorphismRestriction
        In the expression: fmap
        In an equation for `f': f = fmap
    Failed, modules loaded: none.
    

    You can find some information about defaulting in the Haskell 98 Report. I’ll also mention that GHC supports an extended form of defaulting that’s mostly used for GHCi (and is enabled there by default), which occasionally confuses people.

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

Sidebar

Related Questions

module Algorithm where import System.Random import Data.Maybe import Data.List type Atom = String type
I'm working on Project Euler Problem 14. Here's my solution. import Data.List collatzLength ::
I import data from a TSV file with SQL Server 2008. null is replaced
I need to import data from *.dmp file say mydump.dmp. What I'm doing is:
I was about to import data from a table in MySQL to SQL SErver
A user can import data into our website from a file. The data normally
Does anybody know how to call the import data built-in dialog excel from a
I'm using SQL Server ADSI to import data from Active Directory and using the
I'm using SSIS to import data from Excel sheets into SQL Server 2005, the
My program is now still running to import data from a log file into

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.