Sticking with the Person example, we might want to use a dynamically-bound function to specify a different greeting message for different values of Person: data Person = Person { name :: String , greet :: Person -> String } anne = Person "Anne" (\p -> "Howdy, " ++ name p ++ ".") bob = Person "Bob" (\p -> "Hi, " ++ name p ++ "! I'm Bob") carol = Person "Carol" (\_ -> "'Sup?") main = do putStrLn $ anne `greet` bob putStrLn $ bob `greet` carol putStrLn $ carol `greet` anne You could even get really crazy and construct the greeting function at runtime: main = do putStr "Enter a name: " n <- getLine putStrL"Enter a greeting: " greeting <- getLine let user = Person n (\p -> concat [greeting, ", ", name p, "!"]) bob = Person "Bob" (\p -> concat ["Hello, ", name p, "!"]) putStrLn $ bob `greet` user putStrLn $ user `greet` bob $ runhaskell test.hs Enter a name: Morbo Enter a greeting: I WILL DESTROY YOU Hello, Morbo! I WILL DESTROY YOU, Bob! On Tue, 5 May 2015 at 08:38 Shishir Srivastava <shishir.srivastava@gmail.com> wrote:
Hi Brandon,
Thanks for your response. My example was just a bad turnout which I conjured up using tutorials and playing with it.
I was going to follow up my question with the possible practical use of why and where someone would use such a construct to wrap a function inside a new data-type.
For all that matters I could have used 'length' function directly to get the same output.
I appreciate that you already have given the practical example but anything more basic for beginners to highlight the usage would be helpful.
Thanks, Shishir
On Tue, May 5, 2015 at 4:28 PM, Shishir Srivastava < shishir.srivastava@gmail.com> wrote:
Thanks Matthew - that was crisp !
Cheers, Shishir
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners