Haskell 套接字操作调用语法

Haskell socket action invocation syntax

代码片段s <- socket :: IO (Socket Inet Stream TCP)中以“::”开头的子表达式是什么意思?

我能理解什么时候像 socket :: (Family f, Type t, Protocol p) => IO (Socket f t p) 那样在函数签名中使用“::”,但在这种情况下当“::”在动作调用中使用时我不能理解。

这在 the Haskell socket manual

的示例代码中列出

它只是真正的意思"take this expression to produce this type"。费解?不是真的,考虑一下

x = 0

x是什么类型的? Num a => a。如果您特别想要 Int 怎么办?

x = 0 :: Int

仅此而已。它根本不特定于套接字,它是标准 Haskell 语法的一部分。