..在哪里定义?

问题描述

我只是想知道..是否实际上已在Haskell代码中的任何地方定义,例如在the Prelude中? enumFromTo是同一件事吗?我不知道这是什么定义?

enumFromTo x y  =  map toEnum [fromEnum x .. fromEnum y]

[ e1 .. e3 ]  =  enumFromTo e1 e3

解决方法

这是报表section 3.10中指定的语法的一部分。

是的,它可以使用enumFrom等函数转换为代码:

enter image description here

要编辑该问题:您显示的定义是Enum类型类中的“默认定义”。它在您链接的前奏曲中说得很对:

class  Enum a  where
    succ,pred       :: a -> a
    toEnum           :: Int -> a
    fromEnum         :: a -> Int
    enumFrom         :: a -> [a]             -- [n..]
    enumFromThen     :: a -> a -> [a]        -- [n,n'..]
    enumFromTo       :: a -> a -> [a]        -- [n..m]
    enumFromThenTo   :: a -> a -> a -> [a]   -- [n,n'..m]

        -- Minimal complete definition:
        --      toEnum,fromEnum
--             _______                                      -- ____
-- NOTE: these default methods only make sense for types    -- **** NB
--   that map injectively into Int using fromEnum
--  and toEnum.
    succ             =  toEnum . (+1) . fromEnum
    pred             =  toEnum . (subtract 1) . fromEnum
    enumFrom x       =  map toEnum [fromEnum x ..]
    enumFromTo x y   =  map toEnum [fromEnum x .. fromEnum y]
    enumFromThen x y =  map toEnum [fromEnum x,fromEnum y ..]
    enumFromThenTo x y z = 
                        map toEnum [fromEnum x,fromEnum y .. fromEnum z]

因此, a中的每个Enum类型必须至少提供toEnum :: Int -> afromEnum :: a -> Int的定义。如果它没有提供自己的定义,例如enumFromTo :: a -> a -> [a],然后将使用其默认定义:

enumFromTo :: a -> a -> [a]
enumFromTo x  y   =  map  toEnum  [fromEnum x .. fromEnum y ]
--        └a┘└a┘                           └a┘           └a┘
--                                 └──Int────┘   └──Int────┘
--                       └Int->a┘ └─────────[Int]───────────┘
--                   └───────────────[a]────────────────────┘

对于Int类型本身,在库中的某个地方定义了 specific 定义,因此enumFromTo的默认定义不用于Int ,因此没有恶性循环。