我对这是什么有一个粗略的想法,但如果有人对"表达问题"的解释他们认为简洁直观我很乐意听到它.
computer-science programming-languages functional-programming
我是第一次看OCaml,有一些F#和Haskell的背景知识.因此,很多东西都很熟悉,但有一点不是"开放"和"封闭"联合的概念(使用反引号和[<语法]).
这些有用的是什么以及它们使用的次数是多少?
我想将一个函数应用于列表中的每个元素(map),但元素可能有不同的类型,但都实现了相同的函数(这里是"putOut"),就像一个接口.但是,我无法创建此"接口"类型的列表(此处为"可输出").
如何映射实现相同功能的不同类型的列表?
import Control.Monad
main :: IO ()
main = do
mapM_ putOut lst
where
lst :: [Outputable] -- ERROR: Class "Outputable" used as a type
lst = [(Out1 1),(Out2 1 2)]
class Outputable a where
putOut :: a -> IO ()
-- user defined:
data Out1 = Out1 Int deriving (Show)
data Out2 = Out2 Int Int deriving (Show)
instance Outputable Out1 where
putOut out1 = putStrLn $ show out1
instance Outputable Out2 where
putOut out2 = putStrLn $ …Run Code Online (Sandbox Code Playgroud)