The Seductions of Scala, Part II - Functional Programming 209

Posted by Dean Wampler Wed, 06 Aug 2008 01:32:00 GMT

A Functional Programming Language for the JVM

In my last blog post, I discussed Scala’s support for OOP and general improvements compared to Java. In this post, which I’m posting from Agile 2008, I discuss Scala’s support for functional programming (FP) and why it should be of interest to OO developers.

A Brief Overview of Functional Programming

You might ask, don’t most programming languages have functions? FP uses the term in the mathematical sense of the word. I hate to bring up bad memories, but you might recall from your school days that when you solved a function like

    
y = sin(x)
    

for y, given a value of x, you could input the same value of x an arbitrary number of times and you would get the same value of y. This means that sin(x) has no side effects. In other words, unlike our imperative OO or procedural code, no global or object state gets changed. All the work that a mathematical function does has to be returned in the result.

Similarly, the idea of a variable is a little different than what we’re used to in imperative code. While the value of y will vary with the value of x, once you have fixed x, you have also fixed y. The implication for FP is that “variables” are immutable; once assigned, they cannot be changed. I’ll call such immutable variables value objects.

Now, it would actually be hard for a “pure” FP language to have no side effects, ever. I/O would be rather difficult, for example, since the state of the input or output stream changes with each operation. So, in practice, all “pure” FP languages provide some mechanisms for breaking the rules in a controlled way.

Functions are first-class objects in FP. You can create named or anonymous functions (e.g., closures or blocks), assign them to variables, pass them as arguments to other functions, etc. Java doesn’t support this. You have to create objects that wrap the methods you want to invoke.

Functional programs tend to be much more declarative in nature than imperative programs. This is perhaps more obvious in pure FP languages, like Erlang and Haskell, than it is in Scala.

For example, the definition of Fibonacci numbers is the following.

    
F(n) = F(n-1) + F(n-2) where F(1)=1 and F(2)=1
    

An here is a complete implementation in Haskell.

    
module Main where 
-- Function f returns the n'th Fibonacci number. 
-- It uses binary recursion. 
f n | n <= 2 = 1 
    | n >  2 = f (n-1) + f (n-2) 
    

Without understanding the intricacies of Haskell syntax, you can see that the code closely matches the “specification” above it. The f n | ... syntax defines the function f taking an argument n and the two cases of n values are shown on separate lines, where one case is for n <= 2 and the other case if for n > 2.

The code uses the recursive relationship between different values of the function and the special-case values when n = 1 and n = 2. The Haskell runtime does the rest of the work.

It’s interesting that most domain-specific languages are also declarative in nature. Think of how JMock, EasyMock or Rails’ ActiveRecord code look. The code is more succinct and it lets the “system” do most of the heavy lifting.

Functional Programming’s Benefits for You

Value Objects and Side-Effect Free Functions

It’s the immutable variables and side-effect free functions that help solve the multicore problem. Synchronized access to shared state is not required if there is no state to manage. This makes robust concurrent programs far easier to write.

I’ll discuss concurrency in Scala in my third post. For now, let’s discuss other ways that FP in Scala helps to improve code, concurrent or not.

Value objects are beneficial because you can pass one around without worrying that someone will change it in a way that breaks other users of the object. Value objects aren’t unique to FP, of course. They have been promoted in Domain Driven Design (DDD), for example.

Similarly, side-effect free functions are safer to use. There is less risk that a caller will change some state inappropriately. The caller doesn’t have to worry as much about calling a function. There are fewer surprises and everything of “consequence” that the function does is returned to the caller. It’s easier to keep to the Single Responsibility Principle when writing side-effect free functions.

Of course, you can write side-effect free methods and immutable variables in Java code, but it’s mostly a matter of discipline; the language doesn’t give you any enforcement mechanisms.

Scala gives you a helpful enforcement mechanism; the ability to declare variables as val’s (i.e., “values”) vs. var’s (i.e., “variables”, um… back to the imperative programming sense of the word…). In fact, val is the default, where neither is required by the language. Also, the Scala library contains both immutable and mutable collections and it “encourages” you to use the immutable collections.

However, because Scala combines both OOP and FP, it doesn’t force FP purity. The upside is that you get to use the approach that best fits the problem you’re trying to solve. It’s interesting that some of the Scala library classes expose FP-style interfaces, immutability and side-effect free functions, while using more traditional imperative code to implement them!

Closures and First-Class Functions

True to its functional side, Scala gives you true closures and first-class functions. If you’re a Groovy or Ruby programmer, you’re used to the following kind of code.

    
class ExpensiveResource {
    def open(worker: () => Unit) = {
        try {
            println("Doing expensive initialization")
            worker()
        } finally {
            close()
        }
    }
    def close() = {
        println("Doing expensive cleanup")
    }
}
// Example use:
try {
    (new ExpensiveResource()) open { () =>        // 1
        println("Using Resource")                 // 2
        throw new Exception("Thrown exception")   // 3
    }                                             // 4
} catch {
    case ex: Throwable => println("Exception caught: "+ex)
}
    

Running this code will yield:

    
Doing expensive initialization
Using Resource
Doing expensive cleanup
Exception caught: java.lang.Exception: Thrown exception
    

The ExpensiveResource.open method invokes the user-specified worker function. The syntax worker: () => Unit defines the worker parameter as a function that takes no arguments and returns nothing (recall that Unit is the equivalent of void).

ExpensiveResource.open handles the details of initializing the resource, invoking the worker, and doing the necessary cleanup.

The example marked with the comment // 1 creates a new ExpensiveResource, then calls open, passing it an anonymous function, called a function literal in Scala terminology. The function literal is of the form (arg_list_) => function body or () => println(...) ..., in our case.

A special syntax trick is used on this line; if a method takes one argument, you can change expressions of the form object.method(arg) to object method {arg}. This syntax is supported to allow user-defined methods to read like control structures (think for statements – see the next section). If you’re familiar with Ruby, the four commented lines read a lot like Ruby syntax for passing blocks to methods.

Idioms like this are very important. A library writer can encapsulate all complex, error-prone logic and allow the user to specify only the unique work required in a given situation. For example, How many times have you written code that opened an I/O stream or a database connection, used it, then cleaned up. How many times did you get the idiom wrong, especially the proper cleanup when an exception is thrown? First-class functions allow writers of I/O, database and other resource libraries to do the correct implementation once, eliminating user error and duplication. Here’s a rhetorical question I always ask myself:

How can I make it impossible for the user of this API to fail?

Iterations

Iteration through collections, Lists in particular, is even more common in FP than in imperative languages. Hence, iteration is highly evolved. Consider this example:

    
object RequireWordsStartingWithPrefix {
    def main(args: Array[String]) = {
        val prefix = args(0)
        for {
            i <- 1 to (args.length - 1)   // no semicolon
            if args(i).startsWith(prefix)
        } println("args("+i+"): "+args(i))
    }
}
    

Compiling this code with scalac and then running it on the command line with the command

    
scala RequireWordsStartingWithPrefix xx xy1 xx1 yy1 xx2 xy2
    

produces the result

    
args(2): xx1
args(5): xx2
    

The for loop assigns a loop variable i with each argument, but only if the if statement is true. Instead of curly braces, the for loop argument list could also be parenthesized, but then each line as shown would have to be separated by a semi-colon, like we’re used to seeing with Java for loops.

We can have an arbitrary number of assignments and conditionals. In fact, it’s quite common to filter lists:

    
object RequireWordsStartingWithPrefix2 {
    def main(args: Array[String]) = {
        val prefix = args(0)
        args.slice(1, args.length)
            .filter((arg: String) => arg.startsWith(prefix))
            .foreach((arg: String) => println("arg: "+arg))
    }
}
    

This version yields the same result. In this case, the args array is sliced (loping off the search prefix), the resulting array is filtered using a function literal and the filtered array is iterated over to print out the matching arguments, again using a function literal. This version of the algorithm should look familiar to Ruby programmers.

Rolling Your Own Function Objects

Scala still has to support the constraints of the JVM. As a comment to the first blog post said, the Scala compiler wraps closures and “bare” functions in Function objects. You can also make other objects behave like functions. If your object implements the apply method, that method will be invoked if you put parentheses with an matching argument list on the object, as in the following example.

    
class HelloFunction {
    def apply() = "hello" 
    def apply(name: String) = "hello "+name
}
val hello = new HelloFunction
println(hello())        // => "hello" 
println(hello("Dean"))  // => "hello Dean" 
    

Option, None, Some…

Null pointer exceptions suck. You can still get them in Scala code, because Scala runs on the JVM and interoperates with Java libraries, but Scala offers a better way.

Typically, a reference might be null when there is nothing appropriate to assign to it. Following the conventions in some FP languages, Scala has an Option type with two subtypes, Some, which wraps a value, and None, which is used instead of null. The following example, which also demonstrates Scala’s Map support, shows these types in action.

    
val hotLangs = Map(
    "Scala" -> "Rocks", 
    "Haskell" -> "Ethereal", 
    "Java" -> null)
println(hotLangs.get("Scala"))          // => Some(Rocks)
println(hotLangs.get("Java"))           // => Some(null)
println(hotLangs.get("C++"))            // => None
    

Note that Map stores values in Options objects, as shown by the println statements.

By the way, those -> aren’t special operators; they’re methods. Like ::, valid method names aren’t limited to alphanumerics, _, and $.

Pattern Matching

The last FP feature I’ll discuss in this post is pattern matching, which is exploited more fully in FP languages than in imperative languages.

Using our previous definition of hotLangs, here’s how you might use matching.

    
def show(key: String) = {
    val value: Option[String] = hotLangs.get(key)
    value match {
        case Some(x) => x
        case None => "No hotness found" 
    }
}
println(show("Scala"))  // => "Rocks" 
println(show("Java"))   // => "null" 
println(show("C++"))    // => "No hotness found" 
    

The first case statement, case Some(x) => x, says “if the value I’m matching against is a Some that could be constructed with the Some[+String](x: A) constructor, then return the x, the thing the Some contains.” Okay, there’s a lot going on here, so more background information is in order.

In Scala, like Ruby and other languages, the last value computed in a function is returned by it. Also, almost everything returns a value, including match statements, so when the Some(x) => x case is chosen, x is returned by the match and hence by the function.

Some is a generic class and the show function returns a String, so the match is to Some[+String]. The + in the +String expression is analogous to Java’s extends, i.e., <? extends String>. Capiche?

Idioms like case Some(x) => x are called extractors in Scala and are used a lot in Scala, as well as in FP, in general. Here’s another example using Lists and our friend ::, the “cons” operator.

    
def countScalas(list: List[String]): Int = {
    list match {
        case "Scala" :: tail => countScalas(tail) + 1
        case _ :: tail       => countScalas(tail)
        case Nil             => 0
    }
}
val langs = List("Scala", "Java", "C++", "Scala", "Python", "Ruby")
val count = countScalas(langs)
println(count)    // => 2
    

We’re counting the number of occurrences of “Scala” in a list of strings, using matching and recursion and no explicit iteration. An expression of the form head :: tail applied to a list returns the first element set as the head variable and the rest of the list set as the tail variable. In our case, the first case statement looks for the particular case where the head equals Scala. The second case matches all lists, except for the empty list (Nil). Since matches are eager, the first case will always pick out the List("Scala", ...) case first. Note that in the second case, we don’t actually care about the value, so we use the placeholder _. Both the first and second case’s call countScalas recursively.

Pattern matching like this is powerful, yet succinct and elegant. We’ll see more examples of matching in the next blog post on concurrency using message passing.

Recap of Scala’s Functional Programming

I’ve just touched the tip of the iceberg concerning functional programming (and I hope I got all the details right!). Hopefully, you can begin to see why we’ve overlooked FP for too long!

In my last post, I’ll wrap up with a look at Scala’s approach to concurrency, the Actor model of message passing.

Comments

Leave a response

  1. Avatar
    yachris about 16 hours later:

    Hey Dean,

    Thanks for doing this—it’s interesting to get another view on Scala.

    Most entertaining to see that “You can create named or anomalous functions”... I do create anomalous functions sometimes, but unit testing usually catches them :-). I think you probably meant anonymous.

    As an old Lisp hacker, I was glad to see that Dan Weinreb wrote about Scala . It’s another interesting take.

    However, I do have to say that I find the FP crowd going on and on and on about what I’ll call, for lack of a good term, micro operations. It’s like someone saying, “GEE, my language does REALLY KEWL addition!” and I can’t help but feel like, hey, addition is good and necessary, but it’s a really small part of the overall problem.

    I think OO was created to solve the large-problem puzzle… and FP just seems more involved with the small stuff.

  2. Avatar
    Dean Wampler about 18 hours later:

    Doh! Thanks for catching the typo. Fixed.

    I appreciate your thoughts. Interesting comment about big vs. small stuff. I don’t have enough experience to comment on FP being about the small stuff. It will be interesting to see how projects using mixed-paradigm languages like Scala split FP vs. OOP usage.

  3. Avatar
    James Iry about 19 hours later:

    yachris,

    Many intros do start with factorial, map, filter, and simple pattern matching. That’s because they’re meant as intros to people who’ve never heard of this stuff. But but it certainly doesn’t mean that that’s all that functional stuff is good for.

    For larger scale purely functional stuff see Functional Reactive Programming.
    • http://www.haskell.org/yampa/AFPLectureNotes.pdf
    • http://www.cs.nott.ac.uk/nhn/Publications/hw2003.pdf
    • http://www.haskell.org/haskellwiki/Frag
    For more mainstream larger scale webby things see HAppS and lift.
    • http://happs.org/
    • http://liftweb.net/index.php/Main_Page
    Or, if you want something more intermediate in scope, go read about parser combinators.
    • http://www.cs.nott.ac.uk/gmh/pearl.pdf
    • http://www.cs.kuleuven.be/adriaan/?q=sparsec
    Then look at functional compilers.
    • http://www.dsic.upv.es/wflp2000/paper13.ps.gz
  4. Avatar
    Daniel Spiewak 1 day later:

    Minor aside: the term functor actually refers to a technique for abstracting over a collection. While functors are defined in terms of higher-order functions, they do not otherwise relate to closures, much less types which declare an apply() method. Besides that, nice article.

  5. Avatar
    James Iry 1 day later:

    The “functor” that Daniel mentions is more general than collections. It was borrowed by the FP community from Category Theory. It’s a way to map from an instance of F[A] to an instance of F[B] using a function of type A => B (where F is some parameterized type that may or may not be a collection type and A and B are any types). There are a few rules for this mapping. See http://james-iry.blogspot.com/2007/10/monads-are-elephants-part-3.html for more about functors in Scala.

    Dean, the way you use the word is borrowed ultimately from C++ where it means “function object”. As far as I can tell, this usage isn’t compatible with the FP/CT definition.

    This is one of a number of naming collisions we’ll find as Scala brings FPers and OOists together.

  6. Avatar
    James Iry 1 day later:

    yachris,

    For larger scale FP stuff see functional reactive programming and parser combinators. See HAppS and Scala lift. Peel back the covers on GHC or Scalac. Look at what the Erlang crowd is doing. Read about Clojure or Haskell and software transactional memory. Read “Practical Common Lisp” online.

    Don’t let blog entries on factorial, map, filter, and sums over lists confuse you into thinking that that’s all that FP has to offer. It’s just that everybody has to start somewhere. After all, I remember a day when just about every OO tutorial had something about Shape as a base class/interface and Rectangle and Triangle as subclasses. Should I have concluded that OO was all about geometry?

  7. Avatar
    Dean Wampler 1 day later:

    @James, you’re exactly right that I used the term “Functor” in the old-fashioned way that C++ programmers used it, since I’m (still) a recovering C++ programmer.

    Sorry to confuse the FP experts…

  8. Avatar
    James Iry 1 day later:

    Oh, it’s not that one is more “old fashioned” than the other. I know Java programmers currently use the word “functor” about the the same way (except that Java, unlike C++ and Scala, doesn’t have a way to define “operator ()”). It’s just that there are two usages and they collide in Scala (and maybe other hybrid, statically typed languages like OCaml and F#).

    Oddly, I’d bet that the “functor” from CT/FP is probably older. That stuff has been around for a long time even if most of the rest of us old C++ heads weren’t aware of it (yup, I was doing C then C++ before Java was a gleam in Gosling’s eye).

    Somebody told me in #scala that the OO meaning of “functor” comes from Coplien. It’s not clear if he was just making up a word or if he misappropriated it.

  9. Avatar
    BK 4 days later:

    Doesn’t

    val hello = new Hello

    have to be

    val hello = new HelloFunctor

    ?

  10. Avatar
    Dean Wampler 5 days later:

    @BK, good catch. Yes. I fixed this, but also replaced the word Functor with Function Object (just Function in the code example), since Functor has a specific meaning in FP that I wasn’t aware of, as others remarked.

  11. Avatar
    Rafael de F. Ferreira 25 days later:
    Just for fun, here are a couple more ways to iterate through the arguments:
    for {
      i <- args.indices.drop(1)
      if args(i) startsWith prefix
    } printf("args(%d): %s\n", i, prefix)
    

    and

    args.zipWithIndex
        .drop(1)
        .filter {case (s, i) => s startsWith prefix}
        .foreach(arg => println("args("+arg._2+"): "+arg._1))
    

    and

    for {
      (s, i) <- args.zipWithIndex.drop(1)
      if s startsWith prefix
    } println("args("+i+"): "+s)
    
  12. Avatar
    Seo Tips about 1 year later:

    Internet traffic spikes aren’t what they used to be. It is now evident that even the smallest sites can suffer the attention of the global audience. This presentation dives into techniques to avoid collapse under dire circumstances. Looking at some real traffic spikes, we’ll pinpoint what part of the architecture is crumbling under the load; then, walk though stop-gaps and complete solutions

  13. Avatar
    Health Insurance about 1 year later:

    You could always start a whole new command line to run it from the native host. Ensuring the code is correct and seamless will drastically help.

  14. Avatar
    jewellery about 1 year later:

    I am dreaming for,I am happy to see this.

  15. Avatar
    Sweat about 1 year later:

    thank you for sharing with us

  16. Avatar
    yoga pant about 1 year later:

    i hope you can update day after day

  17. Avatar
    cheap vps over 2 years later:

    cheap VPS

  18. Avatar
    DM800 over 2 years later:

    At present, there are 2,400 industrial enterprises whose total product value amounted to RMB10.9 billion in 1985. The product value of the light and textiles industries accounted for 60% of the total.

  19. Avatar
    craigslist reviews over 2 years later:

    Scala is getting popularity among people… Second version of it is the proof that people having reliance on it… This part is about functional programming and providing beneficial info… More like it is required,,,, http://yourlistings.org

  20. Avatar
    Alina's List over 2 years later:

    It is possible that we can employee a functional style of programming in languages that are not traditionally or technically considered functional languages.I always learn a lot from your posts.Thanks for your postings and do keep postings.

  21. Avatar
    crystal potpourri | scented crystals | scented rocks">john over 2 years later:

    I have seen some of the overlook of FP, still need more information overall crystal potpourri | scented crystals | scented rocks

  22. Avatar
    bag manufacturer over 2 years later:

    r, Object-Oriented Programming (OOP) was going mainstream. For many

  23. Avatar
    HGH over 2 years later:

    This presentation dives into techniques to avoid collapse under dire circumstances. Looking at some real traffic spikes, we’ll pinpoint what part of the architecture is crumbling under the load; then, walk though stop-gaps and complete solutions

  24. Avatar
    jet parça tl kontör bayili?i over 2 years later:

    Good post,I think so! Dear Admin, I thank you for this informative article.

  25. Avatar
    parça tl kontör fiyatlar? over 2 years later:

    thank you for sharing with us

  26. Avatar
    Rangemaster 110 over 2 years later:

    thanks, another great one

  27. Avatar
    San Diego Electrician over 2 years later:

    I found your blog post while searching Google. Very informative.

  28. Avatar
    San Diego Electrical over 2 years later:

    The famous French scientist Louis Pasteur once said, “There are no such things as applied sciences, only applications of science.” As a nation we are continuing to find ourselves in increasingly difficult economic times. Our state and federally elected leaders are constantly under pressure to make difficult appropriations decisions at all levels of their budgets.

  29. Avatar
    San Diego Locksmith over 2 years later:

    There are lots of situations in which you need to set a paged list of data back to the first page in code. For example, let’s say you search your database by specifying some search criteria, and you get several pages of results. Using the supplied paging controls, you jump to different pages—page 1… page 2… page 3… and then, you decide to alter the search criteria. You certainly don’t want the new set of results to start on page 3! Of course, you’d want to see the new results starting again from the first page.

  30. Avatar
    camisetas futbol over 2 years later:

    Great information! I just want you to know that this blog really gonna help me to broaden my knowledge.

  31. Avatar
    New York Divorce Lawyer over 2 years later:

    Thanks, part 2 actually let me understand all the stuff where I was lost after part 1.

  32. Avatar
    Bank jobs over 2 years later:

    thanks a lot. I got what I wanted to have.

  33. Avatar
    skifahren Österreich over 2 years later:

    This is a good blog post. This post give purely and quality full information. I’m definitely going to look into it. Really very useful tips give here.

  34. Avatar
    oxpdffr over 2 years later:

    CHM en PDF Convertisseur est un logiciel qui convertit des fichiers CHM (Compiled HTML Help Files) en format PDF avec le titre, le temps, la table des matières, en-tête, pied de page, numéro de page, etc. CHM en PDF Convertisseur possède encore plusieurs fonctions, par exemple :ajouter des filigranes, adjuster la résolution ou la taille du fichier, protéger les documents PDF par mot de passe, etc. Télécharger gratuitement CHM en PDF Convertisseur et expérimenter ce logiciel.

  35. Avatar
    Rocker switch plate over 2 years later:

    I love seeing blog that understand the value of providing a quality resource for free. It is the old what goes around comes around routine.

  36. Avatar
    Heeso over 2 years later:

    Awesome magazine. I really enjoyed reading your articles. This is truly a great read for me. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work!

  37. Avatar
    chanel store over 2 years later:

    I hope to leave my comments here. Thank you

  38. Avatar
    DRM removal software over 2 years later:

    I like this post, you know, very informative.

  39. Avatar
    Thanks for posting over 2 years later:

    Thanks for posting the important information.keep posting in coming future as well We will appreciate your posting!!!

    Philippine divers

  40. Avatar
    robertdecotsa over 2 years later:

    Thank to the post. I really loved reading your blog. It was very well authored and easy to understand. Unlike additional blogs I have read which are really not good. I also found your posts very interesting. In fact after reading, I had to go show it to my friend and he enjoyed it as well! Ponturi pariuri

  41. Avatar
    Pandora over 2 years later:

    You would want this clarity of detail if you ventured out on a lake every day to fish for dinner.

  42. Avatar
    pandora uk over 2 years later:

    You might ask, don’t most programming languages have functions? FP uses the term in the mathematical sense of the word. I hate to bring up bad memories, but you might recall from your school days that when you solved a function like

  43. Avatar
    DRM removal software over 2 years later:

    You know, to be a good programmer is not so easy. it is not to understand it, however, you can finish it, enjoy much. want to Know more about this topic.

  44. Avatar
    domenikmaier over 2 years later:

    Wow great, Thanks for sharing such a valuable coding here, Me too was searching for such an example… Cheers man,

    Seattle Wedding Photographers

  45. Avatar
    pandora over 2 years later:

    The best thing about acquiring on the web is you can observe anything at all the offers, whereby a shop it could be difficult to form on the other hand his or her stock to discover what’s right. Mums adore products which have been unforgettable. Make an effort to found your mommy utilizing a present that is personalized, being an illustration an engagement ring employing their brand personalized inside. Rare metal wedding rings alllow for great products simply because immortalize the mom?¡¥s name throughout platinum. A new precious metal necklace along with a ring creates a great presents to your mom, along with gifts that happen to be frequently overlooked .

  46. Avatar
    insuranceforca over 2 years later:

    We are one of the Leading Insurance Agency In San Diego and California ,Our insurance services are health insurance, Kaiser health insurance, family insurance, group insurance, blue cross insurance, blue shield insurance, affordable health insurance in San Diego.please add my website into your blogger,it is very useful for us.

  47. Avatar
    Designer Handtaschen over 2 years later:

    Hab auch mal nach Handtaschen gesucht und hab noch ein paar andere Handtaschen gefunden und werde ein paar Designer Handtaschen finde, die mir auch gefallen werden und mal schauen

  48. Avatar
    http://www.blacktowhiteiphone4.com over 2 years later:

    Great share. I have a question, Could you share more information about white iphone 4?

  49. Avatar
    Anatolia G?da - para kazanma yollar? over 2 years later:

    Dear Admin, I thank you for this informative article.

    Risk almadan Sermayesiz Evinizden yönetebilece?iniz Kendi i?inizin sahibi olmak istermisiniz ?

  50. Avatar
    http://www.blacktowhiteiphone4.com over 2 years later:

    Moving on to a even worse conditions. I went inside a wardrobe and shot these photos from white iphone 4 during very poor lighting conditions.

  51. Avatar
    Silicone Molding over 2 years later:

    Intertech Machinery Inc. provides the most precise Plastic Injection Mold and Rubber Molds from Taiwan. With applying excellent unscrewing device in molds, Intertech is also very professional for making flip top Cap Molds in the world.

  52. Avatar
    Couple en Crise over 2 years later:

    Admiring the dedication you put into your website and detailed information you provide. It’s great to come across a blog every once in a while that isn’t the same old rehashed material. Wonderful read! I’ve saved your site and I’m adding your RSS feeds to my Google account.

  53. Avatar
    pandora over 2 years later:

    I was very encouraged to find this site. Pandora sale.I wanted to thank you for this special read. I definitely savored every little bit of it and I have you bookmarked to check out new stuff you post. Pandora Jewelry.I can see that you are putting a lots of efforts into your blog. Keep posting the good work.Some really helpful information in there. Bookmarked. Nice to see your site. Thanks

  54. Avatar
    replica tag heuer carrera over 2 years later:

    Some really helpful information in there. Bookmarked. Nice to see your site. Thanks

  55. Avatar
    Criminal Check over 2 years later:

    Good post! Yes, your previous post about this is also great.

  56. Avatar
    Richard over 2 years later:

    It was very well authored and easy to understand. Unlike additional tenant Screening blogs I have read which are really not good.

  57. Avatar
    iPad ePub Transfer for Mac over 2 years later:

    I really like this essay. Thank you for writing it so seriously. I want to recommend it for my friends strongly. An Professional transfer that can transfer the ePub books onto your iPad on Mac and export the iPad ePub to Mac local folder.

  58. Avatar
    lago di caldonazzo over 2 years later:

    nice info

    visit vendita computer lago di caldonazzo

  59. Avatar
    smart battery charger over 2 years later:

    e gets changed. All the work that a mathematical function does has to be returned in the result.

  60. Avatar
    Tenant Screening over 2 years later:

    I have found Open method invokes the user-specified worker function. The syntax worker: () => Unit defines tenant Screening the worker parameter as a function that takes no arguments and returns nothing

  61. Avatar
    Tenant Screening over 2 years later:

    I do have to say that I find the FP crowd going on and on and on about what I’ll call, for lack of a good term, micro operations. It’s tenant Screening like someone saying, “GEE, my language does REALLY KEWL addition!” and I can’t help but feel like, hey, addition is good and necessary,

  62. Avatar
    coach over 3 years later:

    thanks for share with us

  63. Avatar
    Criminal Records over 3 years later:

    Functions are first-class objects in FP. You can create named or anonymous functions, assign them to variables, pass them as arguments to other functions, etc.

  64. Avatar
    Download Software For over 3 years later:

    nice as programming tutorial.

  65. Avatar
    Criminal Search over 3 years later:

    The upside is that you get to use the approach that best fits the problem you’re trying to solve.

  66. Avatar
    Tenant Screening over 3 years later:

    Thank you for posting such article. Its great to see such eye opening post.There are still many things to learn and more surprises to come. Meanwhile, while we are waiting why don’t we try Tenant Screening. It teaches us how to achieve the best protection for the best times.

  67. Avatar
    cable ties over 3 years later:

    nice approach on this topic.

  68. Avatar
    Jordan Fusion 5 over 3 years later:

    Some really helpful information in there. Bookmarked. Nice to see your site. Thanks

  69. Avatar
    iPad Video Converter for Mac over 3 years later:

    Thanks for your post, very informative.

  70. Avatar
    Designer Sunglasses over 3 years later:

    Buy $10 Replica Designer Sunglasses with 3-day FREE SHIPPING

  71. Avatar
    SEO Firm India over 3 years later:

    It looks like you have really placed a lot of effort into your blog and I require more of these on the web these days. My husband actually loved your article. I don’t have a great deal to say in retort, I only this minute wanted to comment to say well done.

  72. Avatar
    Yalova Emlak over 3 years later:

    Thanks for this article.I like its.As to me it’s good job.

  73. Avatar
    fhamortgageleads over 3 years later:

    Hi dream I agree with you and karina this is very helpful information.

  74. Avatar
    mortgagerefinanceleads over 3 years later:

    I like this article so much.How could you wrote such a nice one? I try too. But finally I gave up.Want to try again.

  75. Avatar
    mortgagerefinanceleads over 3 years later:

    I could agree with michael this is very useful and help me more understand.

  76. Avatar
    bmw over 3 years later:

    I really enjoyed reading your blog. It was very well written and easy to understand. Unlike other blogs I read are not really good.

  77. Avatar
    Mail Mascot Mailer over 3 years later:

    Thanks for this article.I like its.As to me it’s good job.

    Mail Mascot Mailer

  78. Avatar
    asdf over 3 years later:

    please to bying my vi4gra

  79. Avatar
    Lirik Lagu over 3 years later:

    Excellent post.I want to thank you for this informative read,

  80. Avatar
    love quotes over 3 years later:

    It’s good to see this information of Functional Programming’s Benefits for me in your post, i was looking the same but there was not any proper resource, thanks now i have the link which i was looking for my research.

  81. Avatar
    okey oyunu oyna over 3 years later:

    good code.Thanks

    internette görüntülü olarak okey oyunu oyna, gerçek kisilerle tanis, turnuva heyecanini yasa.

  82. Avatar
    funny pictures over 3 years later:

    indeed Functional Programming is very important Concept in software development .So We must follow proper and contribute in development as much as possible

  83. Avatar
    nubrilliance over 3 years later:

    Thanks alot for your share on Functional Programming. It’s a detailed post and very informative. It helped me alot. Thank you very much.

  84. Avatar
    coach purses over 3 years later:

    Mr Coates coach purses is the longest U.S. market popular with one of the most successful leather brand. Mr Coates coach purses store represents the most admirable American fashion innovative style and traditional skills . Mr Coates coach bags have durable quality and exquisite technology, Conspicuous Coach Heels in the female consumers have good reputation. Welcome to our shop Elegant Coach Purses

  85. Avatar
    Discount Designer Sunglasses over 3 years later:

    People in society, you need to learn many things

  86. Avatar
    mac cosmetics over 3 years later:

    Aww, thank you, they really deserve that title I think. ;)

  87. Avatar
    monster beats by dre headphones over 3 years later:

    Thanks alot for your share on Functional Programming. It’s a detailed post and very informative. It helped me alot. Thank you very much.

  88. Avatar
    email marketing softwares over 3 years later:

    Thanks for taking time for sharing this article, it was excellent and very informative. I am very impressed with your blog. I found a lot of information in your article. Keep it up.

  89. Avatar
    porno over 3 years later:

    Je me branle la bite avec ces films porno gratuits en streaming avec de bonnes chattes poilues bien humides de sperme.

  90. Avatar
    porno over 3 years later:

    Je me branle la bite avec ces films porno gratuits en streaming avec de bonnes chattes poilues bien humides de sperme.

  91. Avatar
    Jewellery over 3 years later:

    oasidoiuaes8586

  92. Avatar
    beats by dr dre headphones over 3 years later:

    Some beats by dr dre solo purple training routines that will improve Your Voice instantly when you exercise Them!

  93. Avatar
    dentist in houston over 3 years later:

    Over few days i was facing some problems in language in JVM.But now following this blog i am overcome these problems.Thanks Dean Wampler for shearing functional Programming Language for the JVM.I really appreciate your post.

  94. Avatar
    Popular Software over 3 years later:

    Very useful information! But some items may have been written by more …Popular Software

  95. Avatar
    ?????? over 3 years later:

    ?? ?? ?? ??

  96. Avatar
    ?????? over 3 years later:

    ?? ?? ?? ??

  97. Avatar
    ?????? over 3 years later:

    iphone 4 cases iphone 4 cases

  98. Avatar
    johann mendel over 3 years later:

    A seo expert can greatly increase your online sales through website optimization, link building and increasing page rank.

  99. Avatar
    Jemes Right over 3 years later:

    Would you like 100 PLR Articles ABSOLUTELY FREE?No Problem, just click here and get downloading NOW! These articles cover a range of HOT HOT topics whether you need content for Article directories.

    internet marketing

  100. Avatar
    dallas zip code over 3 years later:

    It’s good to see this information of Functional Programming’s Benefits for me in your post, i was looking the same but there was not any proper resource, thanks now i have the link which i was looking for my research.

  101. Avatar
    awesome tattoos over 3 years later:

    i will visit this portal again

  102. Avatar
    lite 1.4 nigeria over 3 years later:

    Thank you fort his amazing post.

  103. Avatar
    cartier bangle over 3 years later:

    http://www.alijewelry.com/burberry-earring-c-10.html"> Burberry Earring ,
    http://www.alijewelry.com/burberry-bangle-c-11.html"> Burberry Bangle ,

  104. Avatar
    Josh over 3 years later:

    Thanks a bunch for sharing your knowledge on Functional Programming. Your post was very thorough and full of information.

    nubrilliance

  105. Avatar
    tera rmt over 3 years later:

    The disproportionate role of high-impact, hard to predict, and rare events that are beyond the realm of normal expectations in history, science, finance and technology.

  106. Avatar
    edt over 3 years later:

    ????

  107. Avatar
    edt over 3 years later:

    ????

  108. Avatar
    Btech in India over 3 years later:

    the term “functor” actually refers to a technique for abstracting over a collection.

    While functors are defined in terms of higher-order functions, they do not otherwise relate to closures, much less types which declare an apply() method. Besides that, nice article.

  109. Avatar
    nyc escorts over 3 years later:

    Scala is the rising star on the JVM. James Strachan, the inventor of Groovy writes: “I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I’d probably have never created Groovy.” Though one must admit the Groovy back than is not the Groovy from today.

  110. Avatar
    Crystal Jewellery over 3 years later:

    Great post! Nice and informative, I really enjoyed reading it and will certainly share this post with my friends . Read everything you ever wanted to know about wedding rings

  111. Avatar
    Red Wing Shoes Sale over 3 years later:

    Red Wing Work Boots—Highest quality Work Boots You Can Get Millions have enjoyed superior quality craftsmanship of Newest Red Wing Footwear. As you pick up a pair of these tough boots, you get Red Wing Suede Work Boots from a organization who cares about their work and who has been making Newest Red Wing Fur shoes for more than one hundred years. Realize now why they are considered by many the perfect work boots you are able to get. If you ever rely upon the saying you get what you pay for, you’ll be proud to purchase a pair of Red Wings Crazy Horse Shoe. These work boots are regarded for high quality and renowned longevity.

  112. Avatar
    anorawilson over 3 years later:

    Business Courier service for parcels, packages and pallets within UK, Europe and worldwide.

  113. Avatar
    19anorawilson over 3 years later:

    Wonderful …….. this is the lens, actually I was looking for. Your thread is really well to increase golf knowledge.

    Dogs for sale

  114. Avatar
    21petulataylor over 3 years later:

    I can’t wait to hear that. Hope for your successful work.

    Alteril

  115. Avatar
    Notebook Reparatur over 3 years later:

    Scala functions are complex. I have taken a course of Scala this semester and I hate it.

  116. Avatar
    ferragamo shoes over 3 years later:

    Pretty salvatore ferragamo shoes on salvatore ferragamo outlet will help you to become the focus of the crowd. And also if you are a gentle and noble men, these ferragamo mens shoes on our outlet will be your favorite for its novel and luxury design with top quality.

  117. Avatar
    lord and taylor coupons over 3 years later:

    Interesting to hear about how sin(x) could be related to programming. I never thought I’d actually have a use for that after high school. Thanks!

  118. Avatar
    renlewei over 3 years later:

    Gucci Shoulder Bags Gucci Clutches http://www.saleguccinewbags.com/gucci-boston-bags-c-58.html">Gucci Boston Bags Gucci Messenger Bags authentic discount gucci bags authentic discounted gucci bags

  119. Avatar
    tegaderm over 3 years later:

    Your site gives me much interesting stuff here, I really enjoyed. I will be back for more new updates here.

  120. Avatar
    calgary basement renovations over 3 years later:

    thanks for this kind of info

  121. Avatar
    Phoenix Unite over 3 years later:

    iam really impressive.. CCL Client Solutions|LMS

  122. Avatar
    meine lesezeichen over 3 years later:

    Now, it would actually be hard for a “pure” FP language to have no side effects, ever. I/O would be rather difficult, for example, since the state of the input or output stream changes with each operation. So, in practice, all “pure” FP languages provide some mechanisms for breaking the rules in a controlled way.

  123. Avatar
    Sales Consultancy over 3 years later:

    Nice post.Thank you for taking the time to publish this information very useful!I’m still waiting for some interesting thoughts from your side in your next post thanks.

  124. Avatar
    San Jose Relocation over 3 years later:

    I will also read your other parts of the seduction! This one was a great read!

  125. Avatar
    universities in uk over 3 years later:

    This is what I’ve been searching for. I learned so much on it. It’s very creative and one of a kind. I really enjoyed every bit of it. Thumbs up!

  126. Avatar
    Silicon Valley Relocation over 3 years later:

    Another Great POST! Come AGAIN!

  127. Avatar
    Split Testing over 3 years later:

    Split Testing

    HI dean,Thanks for this awesome blog and inspiring article. :))

  128. Avatar
    Airport Transfer Sydney over 3 years later:

    Hi Dean! A lot of young people out there who tries to learn the rope of programming, and it is nice to know that you have written this article which tackle functional programming. Most of us, do not want to go to lengthy of theories, so thei write up is definitely for grab.

  129. Avatar
    Cheap oakleys Oil Rig Sunglasses over 3 years later:

    It’s wonderful, thank you. replica oakley monster dog sunglassescheap Oakley Necessity SunglassesOakley Necessity Sunglasses wholesalereplica Oakley Necessity Sunglassesoakley oil rig sunglasses wholesalecheap Oakley Pit Boss SunglassesOakley Pit Boss Sunglasses wholesaleReplica Oakley HolbrookReplica Oakley JawboneReplica Oakley JulietReplica Oakley Scalpel SunglassesReplica Oakley Straight Jacket SunglassesReplica Oakley Ten SunglassesReplica Oakley Zero SunglassesFake Oakley Monster Dog sunglassesFake Oakley Pit Boss sunglassesFake Oakley Restless sunglassesFake Oakley Scalpel sunglassesOakley Frogskins SunglassesOakley Fuel Cell SunglassesOakley Gascan SunglassesOakley Hijinx Sunglasses

  130. Avatar
    Cheap oakleys Oil Rig Sunglasses over 3 years later:

    It’s wonderful, thank you. replica oakley monster dog sunglassescheap Oakley Necessity SunglassesOakley Necessity Sunglasses wholesalereplica Oakley Necessity Sunglassesoakley oil rig sunglasses wholesalecheap Oakley Pit Boss SunglassesOakley Pit Boss Sunglasses wholesaleReplica Oakley HolbrookReplica Oakley JawboneReplica Oakley JulietReplica Oakley Scalpel SunglassesReplica Oakley Straight Jacket SunglassesReplica Oakley Ten SunglassesReplica Oakley Zero SunglassesFake Oakley Monster Dog sunglassesFake Oakley Pit Boss sunglassesFake Oakley Restless sunglassesFake Oakley Scalpel sunglassesOakley Frogskins SunglassesOakley Fuel Cell SunglassesOakley Gascan SunglassesOakley Hijinx Sunglasses

  131. Avatar
    Fake Oakley Radar over 3 years later:

    It really a good article.Oakley Sport SunglassesOakley Jawbone SunglassesOakley Radar SunglassesOakley M Frame SunglassesFake Oakleys AAA Specials sunglassesFake Oakley Flak Jacket sunglassesFake Oakley Juliet sunglassesFake Oakley Half Jacket sunglassesReplica Oakleys Promotion SaleReplica Oakley Jawbone SunglassesReplica Oakley Oil Rig SunglassesReplica Oakley Polarized SunglassesFake Oakley BatwolfFake Oakley DangerousFake Oakley Dartcheap Oakley Antix SunglassesOakley Antix Sunglasses wholesalereplica Oakley Antix Sunglassescheap oakley batwolf sunglassesoakley batwolf sunglasses wholesalereplica oakley batwolf sunglasses

  132. Avatar
    Fake Oakley Gascan sunglasses over 3 years later:

    I love this article, it’s very well.Oakley Encounter SunglassesOakley Forsake SunglassesOakley Half Wire SunglassesOakley Half X Sunglasses

  133. Avatar
    Approach Direct over 3 years later:

    Wow! This girl must be pretty powerful

  134. Avatar
    lopez butt over 3 years later:

    But java is leading,at most all the programing features are supporting.Tesol training|Tefl courses

  135. Avatar
    ????? over 3 years later:

    ??????????

    ??:http://hellokanpo.com/meiyao/ ED??:http://hellokanpo.com/ ?:http://www.hellokanpo.com/meiyao ???RU486:http://www.hellokanpo.com/view/beijing-ru486.html RU486:http://www.hellokanpo.com/view/shanghai-ru486.html ????:http://www.hellokanpo.com/view/jurenbeiceng.html ???:http://www.hellokanpo.com/view/weigewang.html ???:http://www.hellokanpo.com/view/hongzhizhu1.html

  136. Avatar
    ????? over 3 years later:

    ??????????

    SEX DROPS:http://www.001kanpo.com/product/224.html K-YJelly???:http://www.001kanpo.com/product/230.html ???:http://www.001kanpo.com/product/224.html ????:http://www.001kanpo.com/product/284.html ?:http://www.001kanpo.com/product/227.html ???:http://www.001kanpo.com/product/55.html ???:http://www.001kanpo.com/product/228.html

  137. Avatar
    ????? over 3 years later:

    ??????????

    SEX DROPS:http://www.001kanpo.com/product/224.html K-YJelly???:http://www.001kanpo.com/product/230.html ???:http://www.001kanpo.com/product/224.html ????:http://www.001kanpo.com/product/284.html ?:http://www.001kanpo.com/product/227.html ???:http://www.001kanpo.com/product/55.html ???:http://www.001kanpo.com/product/228.html

  138. Avatar
    pizza hut over 3 years later:

    This is the part 2. Thanks for it it worked out well for us.

  139. Avatar
    Ricky Wilson over 3 years later:

    The export in uk is seen as one of the stronger economies in the world but they have been under the shadow of the US for a long time. Now that the US has become a highly unstable market, the UK is emerging as the right place to divert businesses to.

  140. Avatar
    una over 3 years later:

    i will always come here to read your new words.http://blog.objectmentor.com/articles/2009/04/13/x-tests-are-not-x-tests

  141. Avatar
    http://www.costelloevents.co.uk/corporate-events over 3 years later:

    Your site is very good. Thank you for the opportunity to sign your blog

  142. Avatar
    una over 3 years later:

    i will always come here to read your new word

  143. Avatar
    Seitensprung over 3 years later:

    Found this on my recherche! Great text and a good blog in general.

  144. Avatar
    fashion pr agency over 3 years later:

    Nice post.Thank you for taking the time to publish this information very useful!I’m still waiting for some interesting thoughts from your side in your next post thanks.

  145. Avatar
    outsourcing agency over 3 years later:

    it has been covered so many times before. Not including a referral in a comment like that could be the writer’s way to help its audience do some conscious thinking, not obvious knowing.

  146. Avatar
    hair care product over 3 years later:

    Hair Care Product

    Hi Admin, nice blog. Thank!

  147. Avatar
    christian louboutin over 3 years later:

    good artical,I learm something!

  148. Avatar
    christian louboutin over 3 years later:

    Good artical,I learn something!

  149. Avatar
    Midlands Consulting over 3 years later:

    Hi…

    Nice post, I would like to request you to one more post about that **

    Keep it up

  150. Avatar
    Midlands Consulting over 3 years later:

    Hi…

    Nice post, I would like to request you to one more post about that **

    Keep it up

  151. Avatar
    Manual Link over 3 years later:

    have enjoyed while reading your topic.Thank you for the opportunity

  152. Avatar
    Php Agency over 3 years later:

    have enjoyed while reading your topic.Thank you for the opportunity

  153. Avatar
    Midlands Consulting over 3 years later:

    I really agree that there are numerous reasons to love and hate Apple. It has a lot of advantages and disadvantages. Thanks for this great post.

  154. Avatar
    Midlands Consulting over 3 years later:

    Midlands ConsultingThank you for sharing this website.

  155. Avatar
    S5 Marketing over 3 years later:

    I am really in appreciative of your work. Your illustration job is well done. I see your work each week and it is good.

  156. Avatar
    S5 Marketing over 3 years later:

    S5 MarketingI am really in appreciative of your work. Your illustration job is well done. I see your work each week and it is good.

  157. Avatar
    chy over 3 years later:

    Burberry Outlet September big AD movie has just been published, they cooperates with models Amber Anderson, Matthew Whitehouse, Edie Campbell and Rob Pryor. The model Matthew Whitehouse appears in Burberry AD movie for the second time. The theme is Burberry Nude Color, which derived from the sexy elements of Burberry New Arrival Women Perfume in the nice 1960s.in Burberry UK Prorsum September AD movie, men and women models wear in nude color together, it seems that nude element will become the new fashion focus in this year. The nude color lambs coats wore by models, looks so elegant and exquisite. Burberry offers platform for designers to show literary or artistic talent as always, and combine itself with British artists, weather and music.This season, Burberry Nude Collection is iconic Women Capsule Collection, the clothing are?Burberry Sale , the other kinds include Burberry Sunglasses, Burberry Watches, Burberry Bags, Burberry Shoes. The materials includes satins, sateen, silks, cashmere, lace, PU leather, fur, lambs and so on.

  158. Avatar
    serviced apartments singapore over 3 years later:

    Thanks for this post. It Very nice article. It was a very good article. I like it. Thanks for sharing. Ask you to share good article again.

  159. Avatar
    christmas cards over 3 years later:

    I am happy when reading your blog with updated information! thanks alot and hope that you will post more site that are related to this site.

  160. Avatar
    Uniform designer over 3 years later:

    Your post is really good providing good information.. I liked it and enjoyed reading it. Keep sharing such important posts. Uniform Designer

  161. Avatar
    moroccan oil for hair over 3 years later:

    Hi author, The post is written in very a good manner and it entails many useful information for me. I am happy to find your distinguished way of writing the post. Now you make it easy for me to understand and implement the concept. Thank you for the post.

  162. Avatar
    Php Web Developers over 3 years later:

    Your blog has some of the most fascinating buy viagra information! I’ve read several pages here and I just had to comment and let you know that I thought you’ve been doing a great job here. Keep it up!

  163. Avatar
    latest news today over 3 years later:

    I am really not too familiar with this subject but I do like to visit blogs for layout ideas. You really expanded upon a subject that I usually don’t care much about and made it very exciting. This is a unique blog that I will take note of. I already bookmarked it for future reference.Thank yo

  164. Avatar
    Php Web Developers over 3 years later:

    Thanks for this post. It Very nice article. It was a very good article. I like it. Thanks for sharing. Ask you to share good article again.

  165. Avatar
    Louis Vuittion Clothing over 3 years later:

    Fendi achieved miraculous repeatedly watch, leather, http://www.ezpayless.com leather will become more in recent years women popular choice, often appear in casual clothing,

  166. Avatar
    www.downjacketdiscount.com/ over 3 years later:

    It is good to see the writing can be the thank you

  167. Avatar
    james dean over 3 years later:

    Online Export Import is web based export import company, it provide online data data base of manufactures,Exporters,Importers Suppliers,Buyers products and services providers.

    online sellers | online buyers

  168. Avatar
    ??? over 3 years later:

    SEX DROPS:http://www.001kanpo.com/product/224.html K-YJelly???:http://www.001kanpo.com/product/230.html ???:http://www.001kanpo.com/product/224.html ????:http://www.001kanpo.com/product/284.html ?:http://www.001kanpo.com/product/227.html

  169. Avatar
    ?? over 3 years later:

    ???: http://www.86and81.com/Energy.html ???: http://www.86and81.com/product/55.html ??: http://www.86and81.com/Product/189.html ????: http://www.86and81.com/Product/21.html ??: http://www.86and81.com/product/393.html

  170. Avatar
    satibo online over 3 years later:

    satibo online:http://www.naturalpills2u.com/satibo.html Wodibo:http://www.naturalpills2u.com/wodibocapsule.html sex medicine:http://www.naturalpills2u.com/ vigrx:http://www.naturalpills2u.com/vigrx.html sex medicine online:http://www.naturalpills2u.com/

  171. Avatar
    Psychics over 3 years later:

    Thank you for your informative post.I know a little bit about functional programming.This blog is very helpful.Plaease update the content.

  172. Avatar
    Breguet watches over 3 years later:

    that whether

  173. Avatar
    Martin Roscoe over 3 years later:

    India Export Import Business trading company is providing indian exporters and indian importers, india garment, handicraft, jewellery, food, furniture, gifts exporters list. India Export Import business Directory, manufactures,trade leads and much more products are available for buy and sell.

  174. Avatar
    Martin Roscoe over 3 years later:

    Thank you the wonderful post

    bengal cats

  175. Avatar
    most fuel efficient suv over 3 years later:

    There is a new concept of SUV which is put forward Nissan Pathfinder Concept | Most Fuel Efficient SUV Smaller vans, whilst extremely beneficial, lack the gait style virtually all SUVs, at the same time characteristically far more fuel-efficient, have yet to replicate the requesting view of the highway found in any kind of Sports utility vehicle.

  176. Avatar
    restaurants in savannah ga over 3 years later:

    Liked the book that is nice! restaurants in savannah ga

  177. Avatar
    short term stay singapore over 4 years later:

    I wanted saying thanks to you just for this excellent read!! I definitely loved every amount of it. I’ve got you bookmarked your web blog to look into the latest belongings you post.

  178. Avatar
    iPhone contacts backup over 4 years later:

    well. your article is very useful for all the programmer and it can help me have a better code.

  179. Avatar
    http://www.v-pillsbuyut.com over 4 years later:

    nice job!

  180. Avatar
    http://www.v-pillsbuyut.com over 4 years later:

    nice job!

  181. Avatar
    michael kors over 4 years later:

    Sharing is a virtue, and more bloggers need to read this blog.

  182. Avatar
    London data centre over 4 years later:

    This is just the information I am finding everywhere. Thanks for your blog, I just subscribe your blog.This is a nice blog

  183. Avatar
    backup iPhone SMS over 4 years later:

    So, first, I would like to say thanks for your post. It is always necessary for us to have a copy of the text file to computer and keep it safe.

  184. Avatar
    lipozene over 4 years later:

    I wanted saying thanks to you just for this excellent read!! I definitely loved every amount of it.

  185. Avatar
    virtuell server hosting over 4 years later:

    Thanks for posting this one. The content is very informative. Its very hard to seek post like this. I will keep following more on your post. keep it up

  186. Avatar
    mulberry outlet over 4 years later:

    You would like to search for mulberry shoulder bags at mulberry outlet online shops. Buy top quality mulberry items from mulberry outlet stores.

  187. Avatar
    toms shoes over 4 years later:

    I founded the TOMS Campus Club in Northwood, at the beginning of 2012, knowing it w Re be a perfect fit for Northwood. The TOMS story is inspiring in many ways, especially for students, business-oriented

  188. Avatar
    liudayun over 4 years later:

    I love this article, it’s very well.replica Oakley Commit SQ SunglassesFake Oakley GascanOakley Split Jacket SunglassesOakley Frogskins sunglasses outletoakley fives squared sunglassesFake Oakley Polarized Sunglassesoakley straight jacket sunglassesOakley Gascan sunglassesOakley Half Jacket Sunglasses

  189. Avatar
    MPEG4 Converter over 4 years later:

    I am really in appreciative of your work. Your illustration job is well done. I see your work each week and it is good. :)

  190. Avatar
    Epub Maker Mac over 4 years later:

    I wanted saying thanks to you just for this excellent read!! I definitely loved every amount of it. pdf to epub, doc to epub, epub editor

  191. Avatar
    Ford IDS VCM over 4 years later:

    Low prices on Lexia 3. Qualified orders over $25 ship free 100Z

  192. Avatar
    louboutin sales over 4 years later:

    The Seductions of Scala, Part II – Functional Programming 191 hoo,good article!!I like the post!82

  193. Avatar
    bladeless fans over 4 years later:

    The Seductions of Scala, Part II – Functional Programming 192 good post116

  194. Avatar
    hair chalking over 4 years later:

    Yeah, what you are saying is totally making sense. Even though programming in general is confusing to me.

  195. Avatar
    ??? over 4 years later:

    ????????????????????? ?? ? ?? Cialis ?? ED? ???

  196. Avatar
    crystal swarovski over 4 years later:

    Today the name Anne Klein is associated with everything crystals swarovski from eyewear to hosiery and everything in between, and crystal swarovski yes it is still associated with jewelry, although in swarovski crystal her earliest days Anne Klein designed costume jewelry handmade swarovski bracelets and that is what she was known for. Anne Klein was born swarovski maniac necklace in New York City. She started as a sketcher in 1938 and then 10 years later she started her Junior Sophisticates.

  197. Avatar
    Plastic Mold (100% made in Taiwan) over 4 years later:

    With more than 20 years of experience, Intertech provides an extensive integrated operational ability from design to production of molds 100% made in Taiwan. Additional to our own mold making factory, we also cooperate with our team vendors to form a very strong working force in Taiwan.

    For the overseas market, we work very closely with local representatives in order to take care of the technical communication and after-sales service to our customers. We also participate in the EUROMOLD & FAKUMA exhibitions and meet our customers every year in Europe. By concentrating on mold “niche markets”, we play a very useful mold maker role from the Far East whenever customers want to develop their new projects. We provide services from A to Z to our customers on a very economic cost and effect basis.

  198. Avatar
    Plastic Mold (100% made in Taiwan) over 4 years later:

    With more than 20 years of experience, Intertech provides an extensive integrated operational ability from design to production of molds 100% made in Taiwan. Additional to our own mold making factory, we also cooperate with our team vendors to form a very strong working force in Taiwan.

    For the overseas market, we work very closely with local representatives in order to take care of the technical communication and after-sales service to our customers. We also participate in the EUROMOLD & FAKUMA exhibitions and meet our customers every year in Europe. By concentrating on mold “niche markets”, we play a very useful mold maker role from the Far East whenever customers want to develop their new projects. We provide services from A to Z to our customers on a very economic cost and effect basis.

  199. Avatar
    hermes birkin dark blue over 4 years later:

    Women aren’t the only ones who would have to take care of their babies when out and about?

  200. Avatar
    streamingcougar over 4 years later:

    Just a high way to read on it about that stuff. Good to read yo again.

  201. Avatar
    abercrombie over 4 years later:

    Il était certainement intéressant pour moi de lire le blog. Merci pour elle. J’aime ces sujets et tout connecté à eux. Je voudrais en savoir plus bientôt.

  202. Avatar
    printable coupons for hobby lobby over 4 years later:

    nice, gonna bookmark it love it all the way so far

  203. Avatar
    Air Conditioner Wellington over 4 years later:

    Air Conditioner Wellington

    This was really a quality article. I’d like to write like your article – taking time and effort to make such an useful article. Great effort.

  204. Avatar
    Web development company over 4 years later:

    i am really satisfied the great info. it is a very nice blog.i am agree with you for this post

    This is a great post and thank you for sharing this nice blog

  205. Avatar
    tita over 4 years later:

    I am happy to find this post Very useful for me, as it contains lot of information. I Always prefer to read The Quality and glad I found this thing in you post. Thanks

  206. Avatar
    tita over 4 years later:

    There was a great stuff in this article I really liked it very much! Gold had save a lots of informative site. Thanks a lot for this post!

  207. Avatar
    raihan over 4 years later:

    I wanted to thank for this great read!I really enjoyed reading. One of the more impressive blogs Ive seen. Thanks so much

  208. Avatar
    insan over 4 years later:

    Thanks for your post, very informative.

  209. Avatar
    Water Damage Experts in Philadelphia over 4 years later:

    If its about the article, the commenter feels its one of the best. Indeed he is never wrong to think that there are severl useful information he can find here. Data that he can use on his own blog. Clearly, this marvelous piece must be lauded and he is hoping to find more.

Comments