haskell - Haskell 中的 type 关键字是什么
问题描述
偶然发现了 Haskell 中的 type 关键字:
type Item = String
但不确定它的作用、如何使用它或它与data
. 在线谷歌搜索没有任何帮助。
我尝试在这样的代码中实现它:
import System.IO
main = do
putStrLn "Hello, what's your name?"
type Item = String
let test :: Item
test = "chris"
putStrLn test
但我有一个错误
输入“类型”解析错误</p>
请通俗地说什么是type
数据,如何使用它,它与数据有何不同?
解决方案
它是一个类型别名。这意味着你可以Item
在你的代码中使用你可以使用的地方String
。
例如,当您想要为更复杂的类型命名时,通常会使用类型别名。例如:
import Data.Map(Map)
type Dictionary = Map String String
因此,您可以在这里使用Dictionary
而不是每次写入Map String String
。
此外,如果您想指定您正在使用Item
s,则通常会使用别名,然后在类型签名和文档中使用别名,这通常比编写String
.
如果您还不知道将用于特定对象的类型,也可以使用它。通过使用类型别名,您可以使用Item
,并且稍后如果您更改您的定义类型Item
或使其成为另一种类型的别名。这使得更改类型更加方便。
我尝试在这样的代码中实现它:import System.IO main = do putStrLn "Hello, what's your name?" type Item = String let test :: Item test = "chris" putStrLn test
类型别名是在顶层定义的,而不是在do
块中,这会使类型定义在本地范围内。虽然,就像@moonGoose 所说,有一些建议可以使类型定义更具本地范围,但目前情况并非如此。
您可以定义类型别名,如:
import System.IO
type Item = String
main = do
putStrLn "Hello, what's your name?"
let test :: Item
test = "chris"
putStrLn test
推荐阅读
- python - 在 Pandas 中,如何从 excel 中绘制这个数据框?
- bash - 从 makefile 激活 venv 并将激活转移到 bash 会话
- html - 根据内容设置元素的宽度
- javascript - 为什么 Brain.js LSTM 会产生随机类别?
- android - 假的缺少布局属性
- ruby-on-rails - Mongoid查询嵌套embed文档通过属于和嵌入多个
- javascript - React.JS onMouseOver 动画失败
- c++ - c++中的运算符重载混淆
- r - 不完整数据的 Padr 函数
- typo3 - TYPO3:通过 URL 中的参数过滤 tx_news 类别