将原始类型转换为对象的 Haskell 程序

haskellserver side programmingprogramming更新于 2025/5/24 16:22:17

在 Haskell 中,我们将使用访问器函数以及 getName 函数、构造函数和记录语法将原始类型转换为对象。在第一个示例中,我们将使用 (getName person = name person),在第二个示例中,我们将使用 (getName (Person name _) = name and getAge (Person _ age) = age)。在第三个示例中,我们将使用记录语法。

算法

  • 步骤 1 - "Person"数据类型定义有两个字段,即 Name 和 Age。

  • 步骤 2 - 定义 getName 函数

  • 步骤 3 - 程序执行将从主函数开始。main() 函数对程序有完全的控制权。写法为 main = do。

  • 步骤 4 - 使用构造函数初始化名为"p"的对象,其中包含名称和年龄。

  • 步骤 5 - 调用函数后,使用"putStrLn"语句将 Person 对象的结果名称和年龄打印到控制台。

示例 1

在此示例中,我们定义了一个 Person 数据类型,其中包含两个字段:String 类型的名称和 Int 类型的年龄。我们还定义了一个 getName 函数,该函数接受 Person 对象并返回其名称字段。

data Person = Person { name :: String, age :: Int }

getName :: Person -> String
getName person = name person

main :: IO ()
main = do
   let p = Person { name = "Alice", age = 30 }
   putStrLn $ "Name: " ++ getName p
   putStrLn $ "Age: " ++ show (age p)

输出

Name: Alice
Age: 30

示例 2

在此示例中,我们使用一个构造函数定义 Person 数据类型,该构造函数接受两个参数:一个表示人员姓名的 String 和一个表示人员年龄的 Int。

data Person = Person String Int

getName :: Person -> String
getName (Person name _) = name

getAge :: Person -> Int
getAge (Person _ age) = age

main :: IO ()
main = do
   let p = Person "Alice" 30
   putStrLn $ "Name: " ++ getName p
   putStrLn $ "Age: " ++ show (getAge p)

输出

Name: Alice
Age: 30

示例 3

在此示例中,我们定义了一个 Person 数据类型,其中包含两个字段:String 类型的 getName 和 Int 类型的 getAge。getName 和 getAge 字段使用记录语法定义,该语法会自动生成与字段同名的访问器函数。

data Person = Person { getName :: String, getAge :: Int }

main :: IO ()
main = do
   let p = Person { getName = "Alice", getAge = 30 }
   putStrLn $ "Name: " ++ getName p
   putStrLn $ "Age: " ++ show (getAge p)

输出

Name: Alice
Age: 30

结论

在 Haskell 中,Int、Double 和 Bool 等原始类型表示为值而不是对象。但是,可以创建自定义数据类型来包装这些原始类型并通过方法提供附加功能。在 Haskell 中,我们可以使用访问器函数、构造函数和记录语法进行此类转换。


相关文章