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

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T19:47:56+00:00 2026-05-18T19:47:56+00:00

In a simple way, what are context and view bounds and what is the

  • 0

In a simple way, what are context and view bounds and what is the difference between them?

Some easy-to-follow examples would be great too!

  • 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-18T19:47:57+00:00Added an answer on May 18, 2026 at 7:47 pm

    I thought this was asked already, but, if so, the question isn’t apparent in the “related” bar. So, here it is:

    What is a View Bound?

    A view bound was a mechanism introduced in Scala to enable the use of some type A as if it were some type B. The typical syntax is this:

    def f[A <% B](a: A) = a.bMethod
    

    In other words, A should have an implicit conversion to B available, so that one can call B methods on an object of type A. The most common usage of view bounds in the standard library (before Scala 2.8.0, anyway), is with Ordered, like this:

    def f[A <% Ordered[A]](a: A, b: A) = if (a < b) a else b
    

    Because one can convert A into an Ordered[A], and because Ordered[A] defines the method <(other: A): Boolean, I can use the expression a < b.

    Please be aware that view bounds are deprecated, you should avoid them.

    What is a Context Bound?

    Context bounds were introduced in Scala 2.8.0, and are typically used with the so-called type class pattern, a pattern of code that emulates the functionality provided by Haskell type classes, though in a more verbose manner.

    While a view bound can be used with simple types (for example, A <% String), a context bound requires a parameterized type, such as Ordered[A] above, but unlike String.

    A context bound describes an implicit value, instead of view bound’s implicit conversion. It is used to declare that for some type A, there is an implicit value of type B[A] available. The syntax goes like this:

    def f[A : B](a: A) = g(a) // where g requires an implicit value of type B[A]
    

    This is more confusing than the view bound because it is not immediately clear how to use it. The common example of usage in Scala is this:

    def f[A : ClassManifest](n: Int) = new Array[A](n)
    

    An Array initialization on a parameterized type requires a ClassManifest to be available, for arcane reasons related to type erasure and the non-erasure nature of arrays.

    Another very common example in the library is a bit more complex:

    def f[A : Ordering](a: A, b: A) = implicitly[Ordering[A]].compare(a, b)
    

    Here, implicitly is used to retrive the implicit value we want, one of type Ordering[A], which class defines the method compare(a: A, b: A): Int.

    We’ll see another way of doing this below.

    How are View Bounds and Context Bounds implemented?

    It shouldn’t be surprising that both view bounds and context bounds are implemented with implicit parameters, given their definition. Actually, the syntax I showed are syntactic sugars for what really happens. See below how they de-sugar:

    def f[A <% B](a: A) = a.bMethod
    def f[A](a: A)(implicit ev: A => B) = a.bMethod
    
    def g[A : B](a: A) = h(a)
    def g[A](a: A)(implicit ev: B[A]) = h(a)
    

    So, naturally, one can write them in their full syntax, which is specially useful for context bounds:

    def f[A](a: A, b: A)(implicit ord: Ordering[A]) = ord.compare(a, b)
    

    What are View Bounds used for?

    View bounds are used mostly to take advantage of the pimp my library pattern, through which one “adds” methods to an existing class, in situations where you want to return the original type somehow. If you do not need to return that type in any way, then you do not need a view bound.

    The classic example of view bound usage is handling Ordered. Note that Int is not Ordered, for example, though there is an implicit conversion. The example previously given needs a view bound because it returns the non-converted type:

    def f[A <% Ordered[A]](a: A, b: A): A = if (a < b) a else b
    

    This example won’t work without view bounds. However, if I were to return another type, then I don’t need a view bound anymore:

    def f[A](a: Ordered[A], b: A): Boolean = a < b
    

    The conversion here (if needed) happens before I pass the parameter to f, so f doesn’t need to know about it.

    Besides Ordered, the most common usage from the library is handling String and Array, which are Java classes, like they were Scala collections. For example:

    def f[CC <% Traversable[_]](a: CC, b: CC): CC = if (a.size < b.size) a else b
    

    If one tried to do this without view bounds, the return type of a String would be a WrappedString (Scala 2.8), and similarly for Array.

    The same thing happens even if the type is only used as a type parameter of the return type:

    def f[A <% Ordered[A]](xs: A*): Seq[A] = xs.toSeq.sorted
    

    What are Context Bounds used for?

    Context bounds are mainly used in what has become known as typeclass pattern, as a reference to Haskell’s type classes. Basically, this pattern implements an alternative to inheritance by making functionality available through a sort of implicit adapter pattern.

    The classic example is Scala 2.8’s Ordering, which replaced Ordered throughout Scala’s library. The usage is:

    def f[A : Ordering](a: A, b: A) = if (implicitly[Ordering[A]].lt(a, b)) a else b
    

    Though you’ll usually see that written like this:

    def f[A](a: A, b: A)(implicit ord: Ordering[A]) = {
        import ord.mkOrderingOps
        if (a < b) a else b
    }
    

    Which take advantage of some implicit conversions inside Ordering that enable the traditional operator style. Another example in Scala 2.8 is the Numeric:

    def f[A : Numeric](a: A, b: A) = implicitly[Numeric[A]].plus(a, b)
    

    A more complex example is the new collection usage of CanBuildFrom, but there’s already a very long answer about that, so I’ll avoid it here. And, as mentioned before, there’s the ClassManifest usage, which is required to initialize new arrays without concrete types.

    The context bound with the typeclass pattern is much more likely to be used by your own classes, as they enable separation of concerns, whereas view bounds can be avoided in your own code by good design (it is used mostly to get around someone else’s design).

    Though it has been possible for a long time, the use of context bounds has really taken off in 2010, and is now found to some degree in most of Scala’s most important libraries and frameworks. The most extreme example of its usage, though, is the Scalaz library, which brings a lot of the power of Haskell to Scala. I recommend reading up on typeclass patterns to get more acquainted with all the ways in which it can be used.

    EDIT

    Related questions of interest:

    • A discussion on types, origin and precedence of implicits
    • Chaining implicits
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Short version: Is there a simple, built-in way to identify the calling view in
I have a simple Partial View that I would like to automatically call a
Is there a simple way of making the static content of an .aspx page
Is there a way to allow admins to modify the content of simple static
Is there a simple way to insert the current time (like TIME: [2012-07-02 Mon
Does someone know a simple way to set the default zoom and latitude/longitude with
Is there a simple way to serialize a single-level structure as a string for
Is there a simple way, possibly with open-source command line tools in Linux, to
Is there a simple way in Symfony 1.4 to know whether a submitted form
Is there a simple way to move an element inside its own parent? Like

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.