<p>让我们试着把它移植到Haskell那里。。你知道吗</p>
<pre><code>data Person = Person { fname :: String
, lname :: String
}
</code></pre>
<p>在Python代码中,任何Person对象都可以执行一个action greet(),该操作执行一些IO,这些IO被转换为Haskell:</p>
<pre><code>greet :: Person -> IO ()
greet person = putStrLn $ (fname person) ++ " " ++ (lname person)
</code></pre>
<p>然后你将main写成:</p>
<pre><code>main :: IO ()
main = greet $ Person "Ben" "Tennyson"
</code></pre>
<p>现在,这样做有什么不对?-纯洁。你知道吗</p>
<p>Haskell习语提供了将纯代码和不纯代码分开的方法。
让我们试着用Haskell的方式。。。你知道吗</p>
<p>创建一个类别<strong>人</strong>,其元素可以是一个<strong>人</strong>/<strong>学生</strong>/<strong>员工</strong>或任何有共同行为的人</p>
<pre><code>class Human a where
greet :: a -> String
</code></pre>
<p>我们还可以为<strong>Person</strong>类型创建<strong>Show</strong>实例:</p>
<pre><code>instance Show Person where
show person = (fname person) ++ " " ++ (lname person)
</code></pre>
<p>然后为<strong>Person</strong>实现<em>greet()</em>操作创建一个<strong>Human</strong>实例:</p>
<pre><code>instance Human Person where
greet person = "Hello, " ++ (show person)
main :: IO ()
main = putStrLn . greet $ Person "Ben" "Tennyson"
λ main
Hello, Ben Tennyson
</code></pre>