JS
Size: a a a
JS
AV
AV
AV
AV
AV
KZ
AV
АХ
AV
MK
AV
AV
AV
YP
unit sigs where
signature A where
data T
zero :: T
signature B where
data T
zero :: T
unit m where
module M where
type T = Int -- никаких ньютайпов
zero = 0 :: Int
unit funct where
dependency sigs [A = <A>, B = <B>]
module Foo where
import qualified A
import qualified B
foo = A.zero
bar = B.zero
-- тут компилятор не знает что типы одинаковые
-- если написать
-- baz = foo == bar
-- set.bkp:24:18: error:
-- * Couldn't match expected type `{A.T}'
-- with actual type `{B.T}'
-- NB: `{B.T}' is defined at set.bkp:7:5-10
-- `{A.T}' is defined at set.bkp:3:5-10
-- * In the second argument of `(==)', namely `bar'
-- In the expression: foo == bar
-- In an equation for `baz': baz = foo == bar
unit main where
-- за обеими сигнатурами один и тот же модуль,
dependency funct[A = m:M, B = m:M]
module Main where
import Foo
main = print $ foo == bar -- OK
-- компилятор знает, что типы одинаковые
AA
YP
YP
YP
K