Haskell - 确保您的值包含在 Maybe

问题描述 投票:0回答:1

我想要一个接受参数并返回

Maybe
值的函数。如果参数的类型为
Maybe a
,则实现应为
id
,如果参数为其他类型,则实现应为
Just
。当然,正确的方法是使用类型类,但我正在努力使其正确。有什么建议吗?

main :: IO ()
main = do
    print $ toMaybe 3         -- should be `Just 3`
    print $ toMaybe (Just 3)  -- should be `Just 3` also

我觉得如果我知道正确的语言语法或其他东西,这可能是微不足道的,但我不知道。

haskell typeclass
1个回答
0
投票

您需要

TypeFamilies
,并且可能需要
DerivingVia
+
StandaloneDeriving

class Wrap a where
    type Wrapped a
    wrap :: a -> Wrapped a

instance Wrap (Maybe a) where
    type Wrapped (Maybe a) = Maybe a
    wrap = id

newtype UseJust a = UseJust a
instance Wrap (UseJust a) where
    type Wrapped (UseJust a) = Maybe a
    wrap (UseJust a) = Just a

deriving instance Wrap Int via UseJust Int
deriving instance Wrap Bool via UseJust Bool
deriving instance Wrap () via UseJust ()
-- etc. etc.
© www.soinside.com 2019 - 2024. All rights reserved.