gpt4 book ai didi

haskell - 如何在Haskell中编写参数和结果都是多态的函数

转载 作者:行者123 更新时间:2023-12-02 21:12:16 24 4
gpt4 key购买 nike

如何编写像 int gog(float i)float gog(int i) 这样的函数(通常称为“重载”)?一些简单的重载可以通过以下方式实现

class PP a where
gog :: a -> Int

instance PP Bool where
gog _ = 1

instance PP Char where
gog _ = 1

但是上面的例子只是使参数具有多态性。如果我们想让参数和结果都多态,我们必须这样写:

class PP a where
gog :: Uu b => a -> b

class UU a where
-- This function can convert between different types of UU.
fromUuToUu :: UU b => a -> b

如果没有fromUuToUugog结果的多态性是不可能的。但我不能写 fromUuToUu,这与这个问题的主题相关,即如何制作一个参数和结果都是多态的函数。

最佳答案

{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}

class Poly a b where
gog :: a -> b

instance Poly Int String where
gog = show

instance Poly String Int where
gog = read

instance Poly Int Float where
gog = fromIntegral

instance Poly Float Float where
gog = (*) 2

gog 现在是“完全”多态的。

关于haskell - 如何在Haskell中编写参数和结果都是多态的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14020242/

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