gpt4 book ai didi

haskell - 是否可以在模式匹配中引用类型变量?

转载 作者:行者123 更新时间:2023-12-02 20:54:31 25 4
gpt4 key购买 nike

以下代码(并不意味着做任何有用的事情)可以正常编译:

{-# LANGUAGE ScopedTypeVariables #-}
import System.Random

uselessFunction :: (RandomGen g) => g -> [Int]
uselessFunction gen =
let (value::Int, newGen) = (random gen)
in (uselessFunction newGen)

我是否可以按照以下精神在模式匹配中使用类型变量(代码无法编译):

{-# LANGUAGE ScopedTypeVariables #-}
import System.Random

uselessFunction :: (RandomGen g, Random a) => g -> [a]
uselessFunction gen =
let (value::a, newGen) = (random gen)
in (uselessFunction newGen)

最佳答案

您已经注意到,ScopedTypeVariables 扩展允许您在模式上添加类型注释。但出于扩展的 main 目的,要使类型变量具有本地作用域,以便您可以在函数内引用它,您还必须在类型声明中使用 forall 来声明它,如下所示:

uselessFunction :: forall a g. (RandomGen g, Random a) => g -> [a]

这不会改变声明本身的含义,但会提示 GHC 您可能希望在本地使用该变量。

关于haskell - 是否可以在模式匹配中引用类型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22273684/

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