@符号在Haskell的表达式中有何作用?

我试图弄清楚@endpoint @"start". 它可能是语言扩展的一部分吗?

我看到为该功能所在的模块启用了以下扩展。

{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE DeriveAnyClass             #-}
{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE DerivingStrategies         #-}
{-# LANGUAGE FlexibleContexts           #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase                 #-}
{-# LANGUAGE MultiParamTypeClasses      #-}
{-# LANGUAGE NoImplicitPrelude          #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE RecordWildCards            #-}
{-# LANGUAGE ScopedTypeVariables        #-}
{-# LANGUAGE TemplateHaskell            #-}
{-# LANGUAGE TypeApplications           #-}
{-# LANGUAGE TypeFamilies               #-}
{-# LANGUAGE TypeOperators              #-}

全功能:

endpoints :: Contract () AuctionSchema Text ()
endpoints = (start' `select` bid' `select` close') >> endpoints
  where
    start' = endpoint @"start" >>= start
    bid'   = endpoint @"bid"   >>= bid
    close' = endpoint @"close" >>= close

回答

有两个相关的扩展文档需要阅读:TypeApplicationsDataKinds. 类型应用程序文档中的一个片段:

TypeApplications扩展允许您在表达式中使用可见类型应用程序。下面是一个例子:show (read @Int "5"). 的@Int是可见的类型的应用程序; 它指定 的类型中的类型变量的值read

从数据类型文档中:

使用DataKinds,GHC 会自动将每个数据类型提升为一种类型,并将其(值)构造函数提升为类型构造函数。

我想您还必须了解Symbol,一种比 type-level 更有效(但功能较少)的字符串类型级表示[Char],但我在官方文档中找不到合适的地方来阅读它。你可以在一些GHC.TypeLits黑线鳕中读到它。


以上是@符号在Haskell的表达式中有何作用?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>