gpt4 book ai didi

haskell - 模板haskell中的拼接类型签名

转载 作者:行者123 更新时间:2023-12-04 08:06:02 25 4
gpt4 key购买 nike

我正在尝试为模板 haskell 中的函数创建类型签名。有没有一种简单的方法可以做到这一点?

与此同时,我已经做了一些变通办法来解决它,但它应该更容易,对吧?

-- TH.hs
module Lib.TH (mkFunction) where

import Language.Haskell.TH

mkFunction n = do
let name = mkName n
[d|
$( ... ) :: Integer -> Integer
$(varP name) = \x -> x + 2|]

-- Other.hs
import TH

mkFunction "test"

我应该在 $( ... ) 中写什么以上?我尝试过的所有结果
Invalid type signature: ... :: Integer -> Integer
Should be of form <variable> :: <type>

最佳答案

我不是 TH 专家,但我通过在文档中挖掘并遵循类型错误找到了一种方法。

import Language.Haskell.TH
import Control.Applicative ((<$>))

mkFunction n = do
let name = mkName n
[d|
$( return . SigD name <$> [t| Integer -> Integer |] )
$(varP name) = \x -> x + 2 |]

不知道有没有更干净的方法。

注意 这适用于 7.8.3 但不适用于 7.10.2。 :-(

关于haskell - 模板haskell中的拼接类型签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32276757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com