.. 在哪里定义?

Where is .. defined?

我只是想知道 .. 是否真的在 Haskell 代码中的任何地方定义,就像在 the Prelude 中一样? enumFromTo 是一样的吗?我不明白哪个是定义?

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

[ e1 .. e3 ]  =  enumFromTo e1 e3

它是语法的一部分,在报告中指定,section 3.10

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

关于您对问题的编辑:您显示的定义是 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]

因此 Enum 中的每个类型 a 必须至少提供 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,没有恶性循环。