understanding type constructors and value constructors

Hello everyone, I have just started studying Haskell and I am having a hard time understanding type and value constructors. So to create a new type, you write something like: data FinancialInstrument = Financial String Double deriving (Eq, Show) and then you can write: ibm = Financial "ibm" 150 OK all good. This initializes a FinancialInstrument. What I don't quite grasp is what is the purpose of Financial (the data/value constructor)? And from what I have read, you could have also written: data FinancialInstrument = FinancialInstrument String Double deriving (Eq, Show) To me the second expression is a lot closer to the typical OOP way of doing things (where the type name and constructor(s) have the same name). Why would someone prefer the first notation? Once a value has been constructed, how can I access its fields? Is there a way to create values using named parameters? Thanks!

I'm on my phone which makes replying painful, but consider:
data Weekday = Monday | Tuesday | Wednesday | Thursday | Friday
data Shape = Circle Int | Rectangle Int Int Int Int | Triangle Int Int
data Either a b = Left a | Right b
Cheers,
Alex
On Sep 14, 2017 12:05 AM, "Anwar Ludin"
Hello everyone,
I have just started studying Haskell and I am having a hard time understanding type and value constructors.
So to create a new type, you write something like:
data FinancialInstrument = Financial String Double deriving (Eq, Show)
and then you can write:
ibm = Financial "ibm" 150
OK all good. This initializes a FinancialInstrument. What I don't quite grasp is what is the purpose of Financial (the data/value constructor)? And from what I have read, you could have also written:
data FinancialInstrument = FinancialInstrument String Double deriving (Eq, Show)
To me the second expression is a lot closer to the typical OOP way of doing things (where the type name and constructor(s) have the same name). Why would someone prefer the first notation?
Once a value has been constructed, how can I access its fields?
Is there a way to create values using named parameters?
Thanks!
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

This chapter details it: http://book.realworldhaskell.org/read/defining-types-streamlining-functions.... More questions are welcome, of course.
participants (3)
-
Alex Belanger
-
Anwar Ludin
-
Imants Cekusins