title: Is data constructor a function?
body: <p>I found the following example <a href="http://monads.haskell.cz/html/class.html" rel="nofollow">here</a></p>
  
  <pre><code>instance Monad Maybe where
      Nothing  &gt;&gt;= f = Nothing
      (Just x) &gt;&gt;= f = f x
      return         = Just
  </code></pre>
  
  <p>The <code>return</code> method is defined in the pointfree style, which I know is applicable to functions, but here we have a data constructor whose declaration syntax looks different from the one of functions let alone its purpose.</p>
  
  <p>Another tutorial <a href="http://www.haskell.org/haskellwiki/Constructor" rel="nofollow">says</a>:</p>
  
  <blockquote>
    <p>Data constructors are first class values in Haskell and actually have a type. For instance, the type of the
    Left
    constructor of the
    Either
    data type is:</p>
    
    <p>Left :: forall b a. a -> Either a b</p>
    
    <p>As first class values, they may be passed to functions, held in a list, be data elements of other algebraic data types and so forth. </p>
  </blockquote>
  
  <p>So can anyone make it clear what data constructors are and how they are different from functions if anything.</p>